我的sqlite
数据库中有一个category
表,其中包含name
,count
和count
列。我想过滤掉category
小于2的行,并在该类别中的所有其他数据之前添加另一个category name count
---------- ---------- ----------
fruit apple 4
fruit banana 3
fruit peach 2
meat pork 1
meat beef 1
vegetable spinach 5
vegetable carrot 2
行,以便更容易将它们存储在树视图中在GUI中。
表格中的数据是:
SELECT category, '', 0 FROM inventory
UNION
SELECT category, name, count FROM inventory
WHERE category IN
(SELECT category FROM inventory
UNION
SELECT category FROM inventory)
AND count > 1;
我所做的是:
category '' 0
---------- ---------- ----------
fruit 0
fruit apple 4
fruit banana 3
fruit peach 2
meat 0
vegetable 0
vegetable carrot 2
vegetable spinach 5
我得到的是:
meat
实际上我想要的是没有WHERE
行。
我认为问题是SELECT
子句仅适用于第一个UNION
之后的SELECT
。但是我怎么能把条件放在第一个{{1}}上呢?谁能帮我?提前谢谢!
答案 0 :(得分:1)
复合查询是根据完整查询构建的(ORDER BY除外)。
只有在您确实要删除重复项时,才应使用UNION而不是ALL。
您需要ORDER BY将标题行排序到正确的位置。
SELECT category, NULL AS name, NULL AS count
FROM inventory
GROUP BY category
HAVING max(count) > 1
UNION ALL
SELECT category, name, count
FROM inventory
WHERE count > 1
ORDER BY category, name;