我有一个包含以下字段的表。
- 订单ID
- 项目ID
我的表有以下条目。
我想比较两个 OrderId 并获得结果,以了解两个 Order 中存在哪些 ItemId,哪些不存在。
我需要的结果如下。
两个订单中都存在 ItemId:200。
ItemId:201 存在于 100 中,而不存在于 101 中
ItemId:202 和 203 存在于 101 中,而不存在于 100 中。
我不确定这是否可以通过 SQL 来完成。
如有任何帮助,我们将不胜感激。提前致谢。
用于测试的 SQL 脚本:
创建表#Orders(OrderId INT, ItemId INT)
插入#Orders 选择 100、200
插入#Orders 选择 100、201
插入#Orders 选择 101、200
插入#Orders 选择 101、202
插入#Orders 选择 101, 203
最佳答案
您需要执行CROSS JOIN
,然后执行LEFT JOIN
来检查可用性。
当您有多个订单和商品时,您想要的输出并不是最好的检查方式,以下输出应该足够了:
;WITH AllOrders AS
(
SELECT DISTINCT O.OrderID FROM #Orders AS O
),
AllItems AS
(
SELECT DISTINCT O.ItemId FROM #Orders AS O
)
SELECT
OrderId = O.OrderId,
ItemId = I.ItemId,
IsItemInOrder = CASE WHEN A.OrderId IS NOT NULL THEN 1 ELSE 0 END
FROM
AllOrders AS O
CROSS JOIN AllItems AS I
LEFT JOIN #Orders AS A ON
O.OrderId = A.OrderId AND
I.ItemId = A.ItemId
ORDER BY
O.OrderId,
I.ItemId
结果:
OrderId ItemId IsItemInOrder
100 200 1
100 201 1
100 202 0
100 203 0
101 200 1
101 201 0
101 202 1
101 203 1
关于SQL:如何获取匹配和不匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54670387/