我已经简化了一个表为例过滤掉行
tray| food
-------+-------
1 | fruit
2 | veg
2 | fruit
2 | meat
3 | meat
4 | bread
我想找到每个水果,是只包含该类食品的托盘的数量。所以输出应该是这样的:
food| count
-------+-------
fruit | 1
veg | 0
meat | 1
bread | 1
我试着写一个查询:
SELECT fruit, COUNT(*)
FROM Inventory
WHERE NOT EXISTS (SELECT *
FROM Inventory I
WHERE I.tray = tray AND I.fruit<>fruit)
GROUP BY fruit;
但是返回的表是不正确的,它看起来像我的子查询是错误的,但它使逻辑意义,我。
food | count
-------+-------
fruit | 2
veg | 1
bread | 1
meat | 2
它看起来像托盘2计数一次的水果,肉类和蔬菜,当它不应该。但是,不应该由我的NOT EXISTS子查询排除吗?我该如何解决?
如果我在读你的问题吧,你想按盘数,然后检查'HAVING COUNT(*)= 1'。 – jpmc26
无关,但是:您需要完全限定子查询中的所有列名:'where i.tray = inventory.tray' –