我有一个问题:
Select n_portions, dish_name
from food_order, dish
where n_portions=
(select max (n_portions)
FROM food_order);
这意味着回归:
fish pie 3
steak and chips 1
pasta bake 2
stuffed peppers 1
但我明白了:
Pasta bake 35
Fish pie 35
Steak and chips 35
Stuffed peppers 35
Ham and rice 35
Lamb curry 35
为什么会这样?
table data
table data
Insert into customer_order values ('00001', '03-Apr-09', '07-apr-09','St. Andrew St');
Insert into customer_order values ('00002', '05-Apr-09', '01-May-09', 'St. Andrew St');
Insert into customer_order values ('00003', '12-Apr-09', '27-Apr-09', 'Union St');
Insert into customer_order values ('00004', '12-Apr-09', '17-Apr-09', 'St. Andrew St');
Insert into Dish values ('D0001', 'Pasta bake', 'yes', '6.00');
Insert into Dish values ('D0002', 'Fish pie', 'no', '9.00');
Insert into Dish values ('D0003', 'Steak and chips', 'no', '14.00');
Insert into Dish values ('D0004', 'Stuffed peppers', 'yes', '11.50');
Insert into Dish values ('D0005', 'Ham and rice' , 'no', '7.25');
Insert into Dish values ('D0006', 'Lamb curry' , 'no', '8.50');
Insert into Drink values ('DR0001', 'Water', 'soft', '1.0');
Insert into Drink values ('DR0002', 'Coffee', 'hot', '1.70');
Insert into Drink values ('DR0003', 'Wine' , 'alcoholic', '3.00');
Insert into Drink values ('DR0004', 'Beer' , 'alcoholic', '2.30');
Insert into Drink values ('DR0005', 'Tea' , 'hot' , '1.50');
Insert into food_order values ('F000001', '000001', 'D0003', '6');
Insert into food_order values ('F000002', '000001', 'D0001', '4');
Insert into food_order values ('F000003', '000001', 'D0004', '3');
Insert into food_order values ('F000004', '000002', 'D0001', '10');
Insert into food_order values ('F000005', '000002', 'D0002', '10');
Insert into food_order values ('F000006', '000003', 'D0002', '35');
Insert into food_order values ('F000007', '000004', 'D0002', '23');
Insert into drink_order values ('D000001', '000001', 'DR0001', '13');
Insert into drink_order values ('D000002', '000001', 'DR0002', '13');
Insert into drink_order values ('D000003', '000001', 'DR0004', '13');
Insert into drink_order values ('D000004', '000002', 'DROOO1', '20');
Insert into drink_order values ('D000005', '000002', 'DR0003', '20');
Insert into drink_order values ('D000006', '000002', 'DR0004', '15');
Insert into drink_order values ('D000007', '000003', 'DR0002', '35');
Insert into drink_order values ('D000008', '000004', 'DR0001', '23');
Insert into drink_order values ('D000009', '000004', 'DR0003', '15');
Insert into drink_order values ('D0000010', '000004', 'DR0004', '15');
答案 0 :(得分:1)
“food_order”和“dish”如何相关?您似乎没有在查询中指定两个表之间的任何关系.....如果您想要每个菜的最大值,您需要最大化该特定菜的值 - 现在,您只是检索表格中所有条目的最大值。
假设在这里(不知道),您可能需要以下内容:
Select
n_portions, dish_name
from
food_order, dish
where
n_portions =
(select max (n_portions) FROM food_order f2 WHERE f2.dish# = dish.dish#)
答案 1 :(得分:0)
您要将n_portions的值设置为subselect中food_order的最大n_portions。
如果你想要获得每个(不是全部)的最大值,你需要计算n_portions并按dish_name分组。此外,你错过了food_order和dish之间的联接。
答案 2 :(得分:0)
select dish_name, max(n_portions)
from food_order f
inner join dish d on d.dish_id = f.dish_id
答案 3 :(得分:0)
您可以使用连接和聚合/组来代替子查询:
SELECT MAX(n_portions), dish_name
FROM food_order
INNER JOIN dish ON (food_order.dish = dish.dish) --guessing a bit here
GROUP BY dish_name
答案 4 :(得分:0)
问题源于这样一个事实:在子选择中,食物_顺序和菜肴之间没有连接。因此,它总是只返回food_order中n_个部分的最大值 - 每次都是相同的值。
根据提供的信息,很难确切地说出你正在寻找什么,但足以说你需要在子选择上有一些过滤器(最大的选择)。有点像...
Select fo.n_portions, d.dish_name
from food_order fo, dish d
where fo.n_portions=
(select max (n_portions)
FROM food_order fo where food_order.dish_id = d.dish_id);