对于这个 mysql 查询,我应该使用哪个连接?
Which join should I use for this mysql query?
我有一个 table 'PR' 有一个特定的 TraceID,另一个叫 'BA' 的 table 有一个 'PAYMENT_ID' 和(有时)一个 TraceID 值我必须从列 'MISC' 中提取,然后匹配 BA 和 PR Trace_ID.
现在,BA 中的一些记录在提取后没有 TraceID,但我仍然需要这些记录以行的形式出现。
PR table:
TraceID
178000
178001
178002
178003
BA table
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 行?
我想我应该有一个联合然后加入,但我所有的尝试都失败了
感谢您的建议。
您真正想要的是 RIGHT JOIN
,或者,首先用 BA
table 重写查询:
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
我有一个 table 'PR' 有一个特定的 TraceID,另一个叫 'BA' 的 table 有一个 'PAYMENT_ID' 和(有时)一个 TraceID 值我必须从列 'MISC' 中提取,然后匹配 BA 和 PR Trace_ID.
现在,BA 中的一些记录在提取后没有 TraceID,但我仍然需要这些记录以行的形式出现。
PR table:
TraceID
178000
178001
178002
178003
BA table
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 行?
我想我应该有一个联合然后加入,但我所有的尝试都失败了
感谢您的建议。
您真正想要的是 RIGHT JOIN
,或者,首先用 BA
table 重写查询:
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