Keith Maxwell wrote:
> Can anyone please explain the results of the query below?
>
>     sqlite> WITH
>     ...>     t1(X) AS (
>     ...>         SELECT 1
>     ...>         UNION ALL
>     ...>         SELECT X+1 FROM t1
>     ...>         LIMIT 9
>     ...>         )
>     ...>     ,t2(Y) AS (
>     ...>         SELECT abs(random() % 10) FROM t1
>     ...>         )
>     ...> SELECT Y, Y <= 5, Y BETWEEN 0 AND 5, Y < 6 FROM t2;
>     7|1|1|0
>     3|1|0|0
>     2|1|1|1
>     2|0|0|1
>     0|1|1|1
>     3|1|1|0
>     5|1|1|0
>     6|1|1|0
>     0|1|1|1

You have four separate calls to random() in each row.

This is because of subquery flattening.
http://www.sqlite.org/optoverview.html#flattening

You can force the database to create a temporary result for t2
by violating at least one of these rules, e.g., add "LIMIT 9" to
t2 and "WHERE 1" to the final SELECT.


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

Reply via email to