繁体   English   中英

SQL-从不包含特定行的不同表返回记录组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM