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
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users