未列出的SQL列表产品

时间:2013-02-26 16:25:25

标签: mysql left-join isnull

我的情况是LEFT JOIN在我需要完成的事情上还不够远。我有一个产品表(包含ItemID,ProductName,Price 的产品)和一个订单表(包含OrderNumber,ItemID,Quantity 列的订单)。

我需要查询返回Products表中当前不属于特定订单的所有产品(例如,列出不属于OrderNumber 52的所有产品)。

我当前的查询列出了所有产品,但不包括属于任何订单号的产品。

$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";  

3 个答案:

答案 0 :(得分:1)

您可以为此目的使用反连接,如下所示:

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

答案 1 :(得分: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

答案 2 :(得分: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