鑑於這兩個表,一個一對多的關係,從訂單到的LineItem:如何查詢兩個不同的子行的父表?
Order
-----
Order_id (primary key)
LineItem
--------
LineItem_id (primary key)
Order_id (foreign key to Order)
price
productCode
我將如何找到訂單與至少一個項目,表示價格= 10.00,並與PRODUCTCODE一個不同線項目= 12345?
鑑於這兩個表,一個一對多的關係,從訂單到的LineItem:如何查詢兩個不同的子行的父表?
Order
-----
Order_id (primary key)
LineItem
--------
LineItem_id (primary key)
Order_id (foreign key to Order)
price
productCode
我將如何找到訂單與至少一個項目,表示價格= 10.00,並與PRODUCTCODE一個不同線項目= 12345?
既然你要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
感謝@Conrad Frix(我認爲)爲我在答案中原本沒有的'distinct'。當我偷了它,其他答案被刪除... –
我刪除它,因爲我喜歡'item2.lineitem_id!= item1.lineitem_id'比我的解決方案item1.productcode <> 12345' –
感謝一堆這樣的反應快!我需要習慣不止一次加入同一張桌子的想法。 –
您可以使用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
不能保證第一個查詢中的lineitem不會出現在第二個查詢中。 –
我們似乎在答案中有一些解釋差異。對我來說,這聽起來像條件應該由價格= 10和產品代碼= 12345,只要有一個產品代碼= 12345的第二個項目是「不同」項目滿足。 –
這是正確的。具有2個LineItem的訂單甚至可以滿足條件,_both_的價格= 10,productCode = 12345。 –