我只是在学习SQL子查询,我有点困惑为什么这不起作用。我有两个表,Order和OrderDetails。它们都有OrderID,OrderDetails有OrderDetails.ProductID和OrderDetails.Quantity字段。因此,不同的订单可以具有不同的产品,并且在OrderDetails表上,如果订单具有多个不同的产品,则OrderID可以有多个行。
所以在订单表上可能就像
订单ID
10248
10249
10250
并在OrderDetails表中:
OrderID | ProductID |量
10248 | 11 | 12
10248 | 42 | 10
10248 | 72 | 5
等
我想要做的是打印出所有订购了1件以上产品的订单ID列表。
我认为以下内容是有道理的:
Select Orders.OrderID
FROM Orders
WHERE Orders.OrderID = (Select OrderDetails.OrderID
FROM OrderDetails
GROUP BY OrderDetails.OrderID
HAVING (COUNT(OrderDetails.ProductID) > 1))
但这肯定不起作用。即使数据库中的OrderID基本上有多个产品,也只打印一个订单ID。我希望我问这个问题的方式并不太混乱,这是我第一次在这里发布关于SQL的文章
答案 0 :(得分:2)
这就是你需要的,你的内在疑问。
Select OrderID
FROM OrderDetails
GROUP BY OrderID
HAVING COUNT(*) > 1
如果您希望这些订单的主Order
表中的其他字段包含多个产品,请使用以下内容。
SELECT *
FROM Orders
WHERE OrderId IN (
SELECT OrderID
FROM OrderDetails
GROUP BY OrderID
HAVING COUNT(*) > 1
)