Can you please send the database schema, and possibly some test data?

On Tue, Feb 25, 2014 at 6:21 AM, Mark Lawrence <no...@null.net> wrote:

> I am seeing what I think may be buggy behaviour, using a recent sqlite
> packaged by debian:
>
>     3.8.3.1 2014-02-11 14:52:19 ea3317a4803d71d88183b29f1d3086f46d68a00e
>
> What I am seeing is too few rows returned from a UNION ALL query.
> I can break it down as follows.
>
> Query 1 on its own works fine, returning 2 rows:
>
>     SELECT
>         'project' AS "kind",
>         status.uuid as update_order
>     FROM
>         project_updates
>     INNER JOIN
>         topics AS projects
>     ON
>         projects.id = project_updates.project_id
>     LEFT JOIN
>         topics AS status
>     ON
>         status.id = project_updates.status_id
>     WHERE
>         project_updates.update_id = 2
>     ;
>
> Results 1:
>
>     kind     update_order
>     -------------------------------------------------
>     project  NULL
>     project  d2e2b16d45d4a7e514da610cdc46cbcfec29431a
>
> Query 2 on its own works fine return 5 rows:
>
>     SELECT
>         'project_status' AS "kind",
>         1 AS update_order
>     FROM
>         updates
>     INNER JOIN
>         project_status_updates
>     ON
>         project_status_updates.update_id = updates.id
>     WHERE
>         updates.id = 2
>     ;
>
> Results 2:
>
>     kind                  update_order
>     --------------------  ----------------------------------------
>     project_status        1
>     project_status        1
>     project_status        1
>     project_status        1
>     project_status        1
>
> If I "union all" those two queries together I get the expected 7 (2 +
> 5) rows.
>
>     kind             update_order
>     ---------------------------------------------------------
>     project          NULL
>     project          d2e2b16d45d4a7e514da610cdc46cbcfec29431a
>     project_status   1
>     project_status   1
>     project_status   1
>     project_status   1
>     project_status   1
>
> However if I union all with an ORDER BY clause like so:
>
>     SELECT
>         'project' AS "kind",
>         status.uuid as update_order
>     FROM
>         project_updates
>     INNER JOIN
>         topics AS projects
>     ON
>         projects.id = project_updates.project_id
>     LEFT JOIN
>         topics AS status
>     ON
>         status.id = project_updates.status_id
>     WHERE
>         project_updates.update_id = 2
>     UNION ALL
>     SELECT
>         'project_status' AS "kind",
>         1 AS update_order
>     FROM
>         updates
>     INNER JOIN
>         project_status_updates
>     ON
>         project_status_updates.update_id = updates.id
>     WHERE
>         updates.id = 2
>     ORDER BY
>         update_order
>     ;
>
> Then I get a rather surprising three rows:
>
>     kind             update_order
>     ---------------------------------------------------------
>     project          NULL
>     project_status   1
>     project          d2e2b16d45d4a7e514da610cdc46cbcfec29431a
>
> As far as I understand union all, it should never return less than the
> sum of the individual queries. Any ideas?
>
> Mark.
> --
> Mark Lawrence
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>



-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to