【发布时间】:2011-05-15 20:44:56
【问题描述】:
处理查询中的不存在子句有点麻烦。
我有三张桌子:
用餐
no_meal integer
type_meal varchar(255)
消费
no_meal integer
designation varchar(255)
quantity integer
食物
designation varchar(255)
quantity integer
type varchar(255)
食物中的数量是储存的数量,消耗的数量是消耗的数量,所以它们会有所不同,因此自然内连接不会减少它。
- 食物类型可以是“饮料”“肉”“鱼”等等。
- 用餐类型可以是“早餐”“午餐”“晚餐”
我想要一个查询,告诉我在所有类型的膳食中消耗的饮料。
我一直在切换和测试代码,但无法正确处理。目前我正在尝试这个:
SELECT Consumed.designation
FROM Consumed
WHERE NOT EXISTS
(SELECT type_meal
FROM Consumed, Food, Meal
WHERE Consumed.designation = Food.designation
AND Consumed.no_meal = Meal.no_meal
AND type = 'Drink'
ORDER BY Food.designation)
EXCEPT
(SELECT type_meal
FROM Meal);
我到底怎么做对了?
感谢您的意见。
编辑:
我将添加一些数据以使其更清晰。
食物
Steak 100 Meat
Water 200 Drink
Coca cola 300 Drink
用餐
0001 Breakfast
0002 Lunch
0003 Dinner
消费
0001 Water 50
0002 Steak 20
0001 Coca cola 20
0003 Water 5
0002 Water 15
现在,我想知道每顿饭都喝了哪种饮料,哪种只会给水。
希望我清除了一些关于这个问题的想法
【问题讨论】: