2010-05-18 4 views
2

pouvez-vous m'aider avec requête sql? J'ai ce problème: J'ai deux tablesMysql gauche rejoindre avec la condition sur la colonne

"Join" Table: Reservation_has_meal

 
+----------------+ 
| id_reservation | 
| id_meal  | 
| pieces   | 
+----------------+ 

et une table avec des données: Repas

 
+-------------+ 
| id_meal  | 
| name  | 
+-------------+ 

Données d'échantillons pour

 
Meal: 
1 | carrot 
2 | potatoe 
3 | cucumber 

Reservation_has_meal 
1 | 2 | 5230 
1 | 3 | 1203 

Comment puis-je obtenir ce résultat pour une réservation avec id_res ervation = 1:

 
id_meal | id_Reservation | name  | pcs | 
-------------------------------------------- 
1  | 1    | carrot | null| 
2  | 1    | potatoe | 5230| 
3  | 1    | cucumber | 1203| 
-------------------------------------------- 

et le résultat pour id_reservation = 2:

 
id_meal | id_Reservation | name  | pcs | 
-------------------------------------------- 
1  | 2    | carrot | null| 
2  | 2    | potatoe | null| 
3  | 2    | cucumber | null| 
-------------------------------------------- 

Merci pour les conseils.

Répondre

2

Check this out

pour id_reservation = 1

select ml.id_meal as id_meal,id_Reservation,name,pcs from Meal as ml 
left outer join 
(select IFNULL(id_Reservation,1) as id_Reservation, pieces as pcs,id_meal from Reservation_has_meal where id_reservation=1) rm 
on rm.id_meal = ml.id_meal 

pour id_reservation = 2

select ml.id_meal as id_meal,id_Reservation,name,pcs from Meal as ml 
left outer join 
(select IFNULL(id_Reservation,2) as id_Reservation, pieces as pcs,id_meal from Reservation_has_meal where id_reservation=2) rm 
on rm.id_meal = ml.id_meal 

-à-dire vous avez besoin de remplacer la valeur id_reservation avec la valeur que vous utilisez pour la recherche

+0

Merci pour votre réponse. Mysql renvoie l'avertissement: # 1582 - Nombre de paramètres incorrect dans l'appel à la fonction native 'isnull' Et en quelques mots, je veux limiter le résultat avec id_reservation et en même temps je veux sélectionner tous les résultats de table repas. => Je veux sélectionner chaque ligne de Meal et gauche joindre les morceaux de reservation_has_meals où id_reservation a une id_reservation spécifique. Merci. –

+0

vérifier maintenant l'erreur de isnull est résolue –

+0

Oui. Merci. Mais le résultat n'est pas ce dont j'ai besoin car la condition à la fin de la requête cause que les résultats ne contiennent que des lignes, où id_reservation existe - donc avec id 2 j'obtiens un résultat vide et avec id 1 j'obtiens seulement 2 rangées au lieu de 3. –

0

J'ai une solution, mais je ne veux pas utiliser select intérieur et si je w Si vous avez plus de données dans les tableaux, la requête est très moche.

SELECT *, (SELECT pcs FROM Reservation_has_meal WHERE Reservation_has_meal.id_meal = meal.id_meal AND Reservation_has_meal.id_reservation=1) FROM meal

0

Vous avez besoin d'un groupe par le id_reservation au lieu du conditionnel rejoindre.