2014-04-16 4 views
0

Compte tenu de ces deux tables, avec un à-plusieurs de Order à LineItem:Comment interroger une table parent pour deux lignes enfants distinctes?

Order 
----- 
Order_id (primary key) 

LineItem 
-------- 
LineItem_id (primary key) 
Order_id (foreign key to Order) 
price 
productCode 

Comment puis-je trouver des commandes avec au moins un élément de ligne où le prix = 10.00, et un autre élément de ligne avec productCode = 12345?

+0

Nous semblons avoir quelques différences d'interprétation entre les réponses. Pour moi, il semble que la condition devrait être satisfaite par un article avec price = 10 et productcode = 12345, tant qu'il y a un second article avec productcode = 12345 pour être l'article "différent". –

+0

C'est correct. Les conditions seraient même satisfaites pour un Ordre avec 2 LineItems, à la fois avec price = 10 et productCode = 12345. –

Répondre

2

Puisque vous voulez 2 articles différents, vous devez joindre la table LineItem deux fois et leur interdire d'avoir la même clé primaire.

select distinct o.order_id 
from order o 
join lineitem item1 
    on item1.order_id = o.order_id 
join lineitem item2 
    on item2.order_id = o.order_id 
and item2.lineitem_id != item1.lineitem_id 
where item1.price = 10 
    and item2.productcode = 12345 
+0

Merci à @Conrad Frix (je pense) pour le «distinct» que je n'avais pas à l'origine dans ma réponse. Après je l'ai volé, cette autre réponse a été supprimée ... –

+0

Je l'ai supprimé car j'aimé 'item2.lineitem_id! = Item1.lineitem_id' mieux que ma solution de' item1.productcode <> 12345' –

+0

Merci beaucoup pour un tel une réponse rapide! Je dois m'habituer à l'idée de rejoindre la même table plus d'une fois. –

0

Vous pouvez utiliser UNION et combiner les deux requêtes. Donc, quelque chose comme ça (non testé)

Select o.Order_id, l.price, l.productCode 
from Orders o 
join LineItem l 
    on l.Order_id = o.Order_id 
where l.price = 10 
union 
Select o.Order_id, l.price, l.productCode 
from Orders o 
join LineItem l 
    on l.Order_id = o.Order_id 
where l.productCode = 12345 
+0

Il n'y a aucune garantie que l'élément de ligne de la première requête n'apparaîtra pas dans la seconde. –

Questions connexes