2014-02-05 152 views
0

我如何編寫查詢可找到具有相同訂單行(詳細信息)的訂單?SQL查詢查找具有相同訂單行的訂單

樣本數據

表:訂單

ORDER_ID 
-------- 
A 
B 
C 
D 

表:訂單明細

OrderID ProductID 
------------------ 
A ProductX 
A ProductY 
A ProductZ 
B ProductX 
B ProductY 
C ProductZ 
D ProductX 
D ProductY 
D ProductZ 

現在我想通過ProductX,ProductY,ProductZ並取回AD

這可以在一個查詢中完成嗎?

+0

假設有是沒有訂單表。即使那麼所需的結果可以得到禮儀... –

回答

1

也許這樣的事情是你想要的?

SELECT DISTINCT Orders.OrderID 
FROM Orders 
INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID 
WHERE OrderDetails.ProductID IN ('ProductX', 'ProductY', 'ProductZ') 
GROUP BY Orders.OrderID 
HAVING COUNT(*) = 3 

另請注意,Order是保留關鍵字,不應作爲表名使用。

+0

假設沒有訂單表..即使那麼所需的結果可以得到禮... –

+0

@jpw,遇到問題與查詢,這也會返回超過3種產品的記錄。像'ProductX','ProductY','ProductZ','ProductA'一樣。 – asolvent

0
SELECT OrderId FROM 
(SELECT DISTINCT o.OrderId, p.Product 
FROM Orders o 
INNER JOIN OrderDetails p 
ON o.OrderId = p .OrderId 
WHERE p.Product IN ('ProductX', 'ProductY', 'ProductZ')) tab 
GROUP BY OrderId 
HAVING COUNT(*) = 3 
0

試試這個

SELECT P.OrderID 
FROM Order1 P JOIN OrderDetails D ON 
      P.OrderID = D.OrderID 
WHERE P.OrderID IN (SELECT OrderID FROM OrderDetails WHERE ProductID IN ('ProductX', 'ProductY', 'ProductZ')) 
Having Count(P.OrderID)=3 
GROUP BY P.OrderID 

FIDDLE DEMO

0

我已經做了必要的事情,而無需使用Order表..

SELECT id from ProductT 
group by id 
having count(*)=3; 

SQL Fiddle