表:陆路
sub_id CUST_ORDER_ID loc_id active_flag
156386 7731100 105 Y
156387 7731101 105 Y
1360780 1360780 101 Y
1360781 1360781 101 Y
表:订单
PARENTORDER_ID CHILDORDER_ID
7731100 8081859
7731101 8081859
1360780 7110643
1360781 7110643
表:标题表
header_key ORDER_ID
2782 7110643
2584 8081859
表:行\表
ORDER_ID Lin_key header_key
7110643 2799 2782
7110643 2793 2782
8081859 2585 2584
8081859 2586 2584
--使用的查询:
select H.header_key,
L.Lin_key,
a.SUB_ID,
a.ORDER_ID as order_id
from
((
--
((
SELECT
S.SUB_ID,
WO.CHILDORDER_ID AS ORDER_ID
FROM
( db.schema.lu_rd S JOIN db.schema.order_rel WO ON ((WO.PARENTORDER_ID::VARCHAR(50) =
(S.CUST_ORDER_ID::VARCHAR(50)))))
WHERE
(S.ACTIVE_FLAG = 'Y'))
UNION ALL (
SELECT
S.SUB_ID,
WO.PARENTORDER_ID AS ORDER_ID
FROM
( WHPRD_INT.DWADMIN.lu_rd S JOIN db.schema.order_rel WO ON ((WO.CHILDORDER_ID::VARCHAR(50) =
(S.CUST_ORDER_ID::VARCHAR(50)))))
WHERE
(S.ACTIVE_FLAG = 'Y'))) A
--
JOIN db.schema.Header_table H ON
((((A.ORDER_ID::VARCHAR(50)))= H.ORDER_ID::VARCHAR(50))))
JOIN db.schema.Line_table L ON
((L.HEADER_KEY = H.HEADER_KEY)))
--因为childorder\u id有两个parentorder\u id,所以导致了问题。关于如何为一个订单id只获取一个子\u id,有什么建议吗?第一次联接之前的查询正在为一个订单id创建2-sub\u id。
1条答案
按热度按时间rekjcdws1#
因此,示例数据如下:
重新编写sql,同时使用cte删除一些括号。。
你确实得到了一些双重待遇:
所以把它剥回去一点:
它为您提供了以下数据:
这并不奇怪,因为这是你的数据。
因此,根据您的业务需要,您需要决定如何放弃sub\u id以仅获得单个订单\u id
一种方法是取第一个(最低的sub\u id)和放置在联合区域中的最简单的位置。
它给出:
但是,当我们将其放回到您的完整sql中时,我们得到:
因为你
line_table
两个都有副本order_id
以及header_key
,所以我假设这是有意的。