我是编程和SQL的新手,很抱歉,如果我没有包含足够的信息。
[我有这两个由OrderID链接的表。表1包括OrderID和客户信息,如FirstName,LastName和Address。表2包括OrderID和订单详细信息,例如ItemName,Price和Quantity。
Table2中的每个OrderID可能包含多个具有相同OrderID的ItemName条目。] 1
CustInfo
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
我正在尝试发送一个查询,该查询将发回每个订单的列表,列出订单ID和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'
你能帮忙吗?
答案 0 :(得分:1)
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'
)
答案 1 :(得分:0)
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');
答案 2 :(得分:0)
如果您希望整个订单不显示,而不仅仅是单个行,您可以使用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'
)