查询数字会返回不同行的相同数字

时间:2009-07-30 15:39:59

标签: 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 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');

5 个答案:

答案 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);