【发布时间】:2018-06-13 18:45:01
【问题描述】:
我有两张表,LatestOrders 和 Orders,它们都有两列,OrderId 和 OrderItemId。
每个OrderId 都有一个或多个OrderItemIds,如下所示:
+---------+-------------+
| OrderId | OrderItemId |
+---------+-------------+
| 5062154 | 187503 |
| 5063171 | 188697 |
| 5063670 | 189314 |
| 5063670 | 189315 |
+---------+-------------+
如您所见,5062154 和 5063171 只有一个 OrderItemId,而 5063670 有两个。
我试图在Orders 表中找到所有OrderItemIds,它们的OrderId 也在LatestOrders 表中,但没有匹配的OrderItemId。
因此,例如,假设上面的表是Orders 表,下面是LatestOrders 表:
+---------+-------------+
| OrderId | OrderItemId |
+---------+-------------+
| 5062154 | 187503 |
| 5063171 | 188697 |
| 5063670 | 189314 |
| 5063698 | 189401 |
+---------+-------------+
结果我需要 189315,因为 OrderId 在 Orders 表中,但它的 OrderItemId 不在。
我可以通过以下查询获得所有 OrderIds 的列表,但我似乎无法找到如何操作它以返回 OrderItemIds。
WITH cte1
AS (
SELECT OrderId
, COUNT(OrderId) AS Count
FROM Orders
GROUP BY OrderId),
cte2
AS (
SELECT OrderId
, COUNT(OrderId) AS Count
FROM LatestOrders
GROUP BY OrderId)
SELECT *
FROM cte1 c1
FULL OUTER JOIN cte2 c2 ON c1.OrderId = c2.OrderId
WHERE c1.Count <> c2.Count
编辑:我忘了提到Orders 表比LatestOrders 表包含更多的订单,我不想找到LatestOrders 中的所有订单表而不是 Orders 表中。我要查找的是两个表中的所有订单,但在LatestOrders 表中没有匹配的OrderItemId。
【问题讨论】:
标签: sql sql-server sql-server-2017