mysql - 我应该使用哪个连接来执行此 mysql 查询?

标签 mysql outer-join

我有一个表“PR”,它有一个特定的 TraceID,另一个表“BA”有一个“PAYMENT_ID”和(有时)一个 TraceID 值,我必须从“MISC”列中提取该值,然后与 BA 匹配和 PR Trace_ID。

现在,BA 中的某些记录在提取后没有 TraceID,但我仍然需要这些记录显示为行。

公关表:

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 获取所有 PR 记录及其相应的 PAYMENT_ID(具有相同的 TraceID),同时从 BA 获取所有没有匹配 TraceID 的 PAYMENT_ID 行?

我想我应该有一种 UNION 然后加入,但我所有的尝试都失败了

感谢您的建议。

最佳答案

您真正想要的是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

关于mysql - 我应该使用哪个连接来执行此 mysql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422811/

相关文章:

mysql - mysql中的每个数据库是否可以有单独的二进制日志?

php - Laravel 5.x 如何创建具有外键约束的新用户?

sql - 为什么在左外连接中需要 'ON' 子句

SQL按日期合并3个表,其中某些日期丢失

mysql - 选择最近的条目并与另一个表连接

mysql - 错误: #1932 Cannot access databases in localhost xampp

mysql - 选择符合共同标准的行

mysql - 结合 SQL View 和 Left Outer Join 查询

sql - 同一请求中的多个外部连接

symfony - 带有理论的查询构建器中的外部联接