我有一个具有特定TraceID的表'PR',另一个名为'BA'的表具有'PAYMENT_ID'和(有时)我必须从列'MISC'中提取的TraceID值以匹配BA和PR Trace_ID。
现在,BA中的某些记录在提取之后没有TraceID,但我仍然需要这些记录显示为行。
PR表:
TraceID
178000
178001
178002
178003
BA表
PAYMENT_ID, MISC
100, AAA/TraceID=178000
101, BBB/TraceID=178001
102, Ref
103, CCC/TraceID=178002
104, Ref2
105, CCC/TraceID=178003
我的输出应该是:
TraceID, PAYMENT_ID
178000, 100
178001, 101
NULL, 102
178002, 103
NULL, 104
等。
我使用以下查询:
select * from
(select TraceID from PR) PR
left join
(select
PAYMENT_ID , if (locate('TraceId=',MISC)>0,SUBSTRING_INDEX(MISC,'TraceId=',-1),'') as traceID from BankingActivity ) BA
on PR.TraceID = BA.traceID
我在BA中只获得具有匹配TraceID的PR行。
现在,我应该如何修改查询以从BA(具有相同的TraceID)中获取所有PR记录及其对应的PAYMENT_ID,还可以从BA中获取所有不具有匹配TraceID的PAYMENT_ID行?
我想我应该有一种UNION然后加入,但是我所有的尝试都失败了
感谢您的建议。
答案 0 :(得分:0)
您真正想要的是一个RIGHT JOIN
,或者先用BA
表重写查询:
SELECT BA.PAYMENT_ID, PR.*
FROM (SELECT PAYMENT_ID,
IF (LOCATE('TraceId=',MISC)>0,SUBSTRING_INDEX(MISC,'TraceId=',-1),'') AS traceID
FROM BankingActivity) BA
LEFT JOIN PR ON PR.TraceID = BA.traceID