联合结果具有相同的条件

时间:2017-09-24 15:52:54

标签: sqlite

我的sqlite数据库中有一个category表,其中包含namecountcount列。我想过滤掉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}}上呢?谁能帮我?提前谢谢!

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;