2009-07-30 9 views
0

J'ai une requête:requête pour les numéros retourne même nombre pour les différentes lignes

Select n_portions, dish_name 
from food_order, dish 
where n_portions= 
(select max (n_portions) 
FROM food_order); 

Il est censé revenir:

fish pie 3 
steak and chips 1 
pasta bake 2 
stuffed peppers 1 

Mais je reçois:

Pasta bake  35 
Fish pie  35 
Steak and chips 35 
Stuffed peppers 35 
Ham and rice 35 
Lamb curry  35 

Pourquoi est-ce heureux?

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

lié à http://stackoverflow.com/questions/1207241/problem-with-sql-function – Fredou

Répondre

1

Comment "food_order" et "dish" sont-ils liés? Vous ne semblez pas spécifier de relation entre les deux tables dans votre requête ..... si vous voulez le maximum pour chaque plat, vous devez max juste les valeurs pour ce plat particulier - en ce moment, vous êtes juste en train de récupérer le maximum sur toutes les entrées de la table.

Juste en supposant ici (sans le savoir), vous avez besoin probablement quelque chose comme:

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

vous définissez la valeur de n_portions aux n_portions max de food_order dans la sous-sélection.

Si vous essayez d'obtenir le maximum pour chacun (pas tous), vous devez faire le compte de n_parts et grouper par nom_plat. De plus, il vous manque les jointures entre food_order et dish.

0
select dish_name, max(n_portions) 
from  food_order f 
inner join dish  d on d.dish_id = f.dish_id 
+0

cela ne fonctionne pas ne fonctionne pas –

0

Vous pouvez utiliser une jointure et un agrégat/groupe par lieu d'une sous-requête:

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

Le problème vient du fait qu'il n'y a joindre pas entre la nourriture _ ordre et plat dans la sous sélectionner. Ainsi, il retournera toujours le maximum de n_ portions dans food_order - la même valeur à chaque fois. D'après les informations fournies, il est difficile de dire exactement ce que vous cherchez, mais il suffit de dire que vous devez avoir un filtre sur le sous-select (le select sur le max). Quelque chose comme ...

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); 
Questions connexes