Sql 查询数字会为不同的行返回相同的数字
我有一个问题:Sql 查询数字会为不同的行返回相同的数字,sql,Sql,我有一个问题: 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 ch
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');
“点菜”和“菜”有什么关系?您似乎没有在查询中指定两个表之间的任何关系。。。。。如果您想要每个菜的最大值,您只需要最大化特定菜的值-现在,您只需检索表中所有条目的最大值
在这里假设(不知道),您可能需要:
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#)
您正在子选择中将n_份数的值设置为食品顺序的最大n_份数
如果您试图获得每个(而不是全部)的最大值,则需要计算n_份数,并按菜名分组。此外,您还缺少食品订单和菜肴之间的联接。您可以使用联接和聚合/组,而不是子查询:
select dish_name, max(n_portions)
from food_order f
inner join dish d on d.dish_id = f.dish_id
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
这个问题源于这样一个事实,即在子选择中,食品订单和菜肴之间没有连接。因此,它总是简单地返回食品订单中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);
链接到