2014-04-16 103 views
0

鑑於這兩個表,一個一對多的關係,從訂單到的LineItem:如何查詢兩個不同的子行的父表?

Order 
----- 
Order_id (primary key) 

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

我將如何找到訂單與至少一個項目,表示價格= 10.00,並與PRODUCTCODE一個不同線項目= 12345?

+0

我們似乎在答案中有一些解釋差異。對我來說,這聽起來像條件​​應該由價格= 10和產品代碼= 12345,只要有一個產品代碼= 12345的第二個項目是「不同」項目滿足。 –

+0

這是正確的。具有2個LineItem的訂單甚至可以滿足條件,_both_的價格= 10,productCode = 12345。 –

回答

2

既然你要2名不同的項目,你需要加入lineitem表兩次,並禁止他們具有相同的主鍵。

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

感謝@Conrad Frix(我認爲)爲我在答案中原本沒有的'distinct'。當我偷了它,其他答案被刪除... –

+0

我刪除它,因爲我喜歡'item2.lineitem_id!= item1.lineitem_id'比我的解決方案item1.productcode <> 12345' –

+0

感謝一堆這樣的反應快!我需要習慣不止一次加入同一張桌子的想法。 –

0

您可以使用UNION並組合這兩個查詢。因此,像這樣(未經)

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

不能保證第一個查詢中的lineitem不會出現在第二個查詢中。 –

相關問題