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);
链接到