【发布时间】:2021-02-14 15:32:22
【问题描述】:
我们有 3 个主桌 Order 、 Pickup 和 Delivery
在一个OrderID 下有多个项目(1 到多个)
- 订单中的某些商品可能已被取走但未送达,反之亦然。
- 某些包含所有商品的订单可能在没有一次交付的情况下被取走,反之亦然。
- 某些订单的所有商品都将被取走并交付。
所以我想要一个订单 ID 列表,然后是订单的取货项目。如果订单 ID 在取件中不存在但在交付中存在,则表示取件丢失并显示“未取件” 反之亦然,如果商品在取件中但未送达,则表示未送达并显示“未送达”
从上述案例中,您可以看到下面的示例数据和预期结果
订单表
OrderID
1
2
3
4
5
取货台
OrderID | PickupItem | Date OrderID | DeliveryItem | Date
1 | 1100 | 13-02-2021 1 | 1100 | 14-02-2021
2 | 2200 | 06-02-2021 2 | 2201 | 05-02-2021
2 | 2201 | 06-02-2021 3 | 3300 | 03-02-2021
3 | 3300 | 04-02-2021 3 | 3301 | 03-02-2021
4 | 4400 | 07-02-2021 5 | 5500 | 05-02-2021
预期结果
OrderID | PickupItem | PickupDate | DeliveryItem | DeliveryDate
1 | 1100 | 13-02-2021 | 1100 | 13-02-2021
2 | 2200 | 06-02-2021 | Not Delivered | Not Delivered
2 | 2201 | 06-02-2021 | 2201 | 13-02-2021
3 | 3300 | 04-02-2021 | 3300 | 13-02-2021
3 | Not Picked Up | Not Picked Up | 3301 | 13-02-2021
4 | 4400 | 07-02-2021 | Not Delivered | Not Delivered
5 | Not Picked Up | Not Picked Up | 5500 | 13-02-2021
【问题讨论】:
-
这不就是两个左连接吗?到目前为止你有什么?
-
如果我取货离开加入送货,这意味着一些未取货的送货项目不会包含在结果中。例如订单 5 将不包括在内
-
from [order] left join pickup... left join delivery...怎么样 -
没想到这么简单我就试一试。但是如何在一条线上映射相同的物品在取货和交付中?例如,如果我们进行左连接,则订单 2 2200 将与 2201 在同一行/行中
-
您在
Order表中也没有PickupItem,或者可能没有单独的Pickup表吗?如果不是,您的数据库设计有问题
标签: sql sql-server tsql join