Hello,

The new example is clear, and therefore also raises a question:

> CREATE TABLE people (name, age);
> INSERT INTO people VALUES ('Bob', 33), ('Jen', 19), ('Liz', 30);
> 
> CREATE VIEW older PARAMETERS (name, otherName) AS
> SELECT t1.age > t2.age AS older
>  FROM people AS t1 WHERE t1.name = parameters.name
>     , people AS t2 WHERE t2.name = parameters.otherName;
> 
> SELECT t1.name AS name
>     , t2.name AS otherName
>     , older(t1.name, t2.name)
>  FROM people AS t1
>     , people AS t2
> WHERE t1.name != t2.name;
> 
> name  otherName  older
> ----  ---------  -----
> Bob   Jen        1
> Bob   Liz        1
> Jen   Bob        0
> Jen   Liz        0
> Liz   Bob        0
> Liz   Jen        1

The function "older" is used here in the SELECT part. But as a table-valued 
function I think it must be in the FROM part:

SELECT t1.name AS name, t2.name AS otherName, older --column name
 FROM people AS t1, people AS t2, older(t1.name, t2.name)
WHERE t1.name != t2.name;

My question is: do you envisage a regular function, returning a single value, 
or a table-valued function. (that behaves as a table, even the parameters may 
be passed as predicates in the WHERE clause)? 

If the subject is "defining regular functions directly in SQL" then CREATE 
FUNTION may be considered. This seems easier to understand and develop. but in 
the end it can have an enormous impact, like in postgres  
sql-createfunction.html 
<https://www.postgresql.org/docs/9.1/static/sql-createfunction.html> 

For the sudoku-solver you do use the table-valued function notation:

        SELECT s FROM x(sud) WHERE NOT ind;

and the function should possibly return multiple rows here. Like if a sudoku is 
ambiguous or if changing the WHERE clause for development.

The idea would help me. I wonder if it can also be applied in inline views. 
That could be imagined if PARAMETERS is written after the query like was an 
earlier idea.

SELECT name, nolder
FROM people
LEFT JOIN  (--inline view
              SELECT COUNT(*) 
              FROM people p2 
              WHERE age>parameter.age
              PARAMETERS (age)
            ) USING (age)
;

E. Pasma 

_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to