2013-02-26 72 views
0

我有一種情況,在我需要完成的情況下,LEFT JOIN不夠用。我有一個產品表(帶有欄目ItemID,產品名稱,價格的產品)和一個訂單表(具有列OrderNumber,ItemID,數量的訂單)。SQL List沒有訂購的產品

我需要查詢返回Products表中當前不是特定訂單的一部分的所有產品(例如,列出所有不屬於OrderNumber 52的產品)。

我當前的查詢列出了所有產品,但排除了屬於任何OrderNumber的產品。

$query = "SELECT Products.ItemID, Products.ProductName 
FROM Products 
LEFT JOIN Orders 
ON Orders.ItemID = Products.ItemID 
WHERE Orders.ItemID IS NULL 
ORDER BY Products.ProductName"; 

回答

1

可以使用反連接用於此目的,像這樣:

SELECT ItemID, ProductName 
FROM Products 
WHERE ItemID NOT IN (
    SELECT ItemID 
    FROM Orders 
    WHERE OrderID = X 
) 
ORDER BY ProductName 
+0

反連接代碼簡單而有效。謝謝你的提示。 – Sterve 2013-02-26 16:37:24

0
SELECT Products.ItemID, Products.ProductName 
FROM Products 
WHERE Products.ItemID not in (select Orders.ItemID from Orders where Orders.OrderNumber = xxx) 
ORDER BY Products.ProductName 
0

您需要什麼,可以很容易地通過在連接條件將訂單號剛剛完成:

SELECT Products.ItemID, Products.ProductName 
FROM Products 
LEFT JOIN Orders 
ON (Orders.ItemID = Products.ItemID AND OrderNumber = 52) 
WHERE Orders.ItemID IS NULL 
ORDER BY Products.ProductName