Запрос чисел возвращает одно и то же число для разных строк - PullRequest
0 голосов
/ 30 июля 2009

У меня есть запрос:

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 ]

1 голос
/ 30 июля 2009

Как связаны "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#)
0 голосов
/ 30 июля 2009

Проблема связана с тем, что в подвыборке нет соединения между заказом еды _ и блюдом. Таким образом, он всегда будет просто возвращать максимум n_ порций в food_order - то же самое значение каждый раз.

Из предоставленной информации трудно сказать, что именно вы ищете, но достаточно сказать, что вам нужно иметь какой-то фильтр для дополнительного выбора (выбор на максимуме). Что-то вроде ...

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);
0 голосов
/ 30 июля 2009

Вместо подзапроса можно использовать объединение и агрегат / группу:

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
0 голосов
/ 30 июля 2009
select dish_name, max(n_portions)
from       food_order f
inner join dish       d on d.dish_id = f.dish_id
0 голосов
/ 30 июля 2009

вы устанавливаете значение n_portions равным максимальному n_portions элемента food_order в подпункте.

Если вы пытаетесь получить максимум для каждого (не для всех), вам нужно выполнить подсчет n_portions и сгруппировать по dish_name. Также вам не хватает соединений между food_order и dish.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...