[英]SQL - Return group of records from different tables not including specific row
我是编程和SQL的新手,如果我没有提供足够的信息,对不起。
[我有两个通过OrderID链接的表。 表1包含OrderID和客户信息,例如名字,姓氏和地址。 表2包含OrderID和订单详细信息,例如ItemName,Price和Quantity。
表2中的每个OrderID可能有多个具有相同OrderID的ItemName条目。] 1
客户信息
OrderID FirstName LastName Address
1 Bob Pratt 123
2 Jane Doe 456
3 John Smith 789
4 Barbara Walters 147
命令
OrderID ItemName Price Quantity
1 Milk 4.00 1
1 Eggs 5.00 2
2 Cheese 5.00 1
2 Bread 5.00 1
3 Milk 4.00 2
4 Yogurt 5.00 2
我正在尝试进行一个查询,该查询将发回每个订单的列表,并列出其他信息中的OrderID和ItemName,只要该订单不包含特定类型的商品(在ItemName中)。 因此,如果一个OrderID包含2个ItemName,其中之一是我不想要的那个,则整个订单(OrderID)都不会出现在我的结果中。
例如,基于包含的img,如果我想显示所有订单,只要它们没有Milk作为ItemName,则结果应仅显示OrderID 2和4。
2 Cheese 5.00 1
2 Bread 5.00 1
4 Yogurt 5.00 2
这是我尝试过的方法,但是即使Milk在技术上是该OrderID的一部分,也会返回OrderID。
SELECT OrderID, FirstName, LastName, ItemName, Price, Quantity
FROM CustInfo
JOIN Orders
ON CustInfo.OrderID = Orders.OrderID
WHERE ItemName != 'Milk'
你能帮我吗?
select o.OrderID, o.ItemName, c.FirstName, c.LastName -- include other fields if needed
from Orders o
left join CustInfo c on o.OrderID = c.OrderID
where o.OrderID not in (
select OrderID from Orders where ItemName = 'Milk'
)
SELECT T1.OrderID, T1.FirstName, T1.LastName, T1.Address, T2.OrderID, T2.ItemName, T2.Price, T2.Quantity
FROM Table2 as T2
LEFT JOIN Table1 as T1 ON T1.OrderID = T2.OrderID
WHERE T2.OrderID <> (SELECT OrderID FROM Table2 WHERE ItemName='Milk');
如果您希望不显示整个订单,而不是仅显示单个行,则可以使用WHERE NOT EXISTS:
SELECT o.OrderID, d.ItemName, d.Price, d.Quantity
FROM Orders o
JOIN OrderDetails d ON o.OrderID=d.OrderID
WHERE NOT EXISTS
(
SELECT * FROM OrderDetails d2
WHERE o.OrderID=d2.OrderID
AND d.ItemName = 'Milk'
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.