sql - 如何在替代条件(2 个中的 1 个)条件下加入表

标签 sql postgresql join

希望在替代条件下进行表连接(此处,替换最初在特定列中找到的数据的子字符串)。所以我基本上想加入在特定列中找到的 2 种字符串类型中的一种。我的第一个查询工作得很好。我在下面运行的第二个查询只是运行,一直运行,一直运行。

第一个查询:

select *
from (select count(hls_case.case_id), count(build_opinion.source_id) as build_case_id
      from hls_case left join
           build_opinion
           on replace(substring(build_opinion.source_id, 69, 37), 'redacted_CASEMETS_', '') = hls_case.case_id and
              build_opinion.build_name = 'romeo3'
     );

第二个查询:

select *
from (select count(hls_case.case_id), count(build_opinion.source_id) as build_case_id
      from hls_case left join
           build_opinion
           on (replace(substring(build_opinion.source_id, 69, 37), 'redacted_CASEMETS_', '') = hls_case.case_id or
               replace(substring(build_opinion.source_id, 61, 29), 'redacted_CASEMETS_', '') = hls_case.case_id
              ) and
              build_opinion.build_name = 'romeo3'
     );

最佳答案

是的,您不希望在联接中使用 OR,除非它是一个非常原始的条件。同样,我会避免在两个表之间进行大于/小于连接。

我不会打赌这会产生相同的结果,但看起来这两个条件之间没有任何可能的重叠,所以我认为你可以做两个左连接, 每个条件一个。

这最多对每个表进行一次扫描。

select
  count(hls_case.case_id),
  count(coalesce (bo1.source_id, bo2.source_id)) as build_case_id
from
  hls_case
  left join build_opinion bo1 on
     replace(substring(bo1.source_id, 69, 37), 'redacted_CASEMETS_', '') = 
     hls_case.case_id and
     bo1.build_name = 'romeo3'
  left join build_opinion bo2 on
     replace(substring(bo2.source_id, 61, 29), 'redacted_CASEMETS_', '') =
     hls_case.case_id and
     bo2.build_name = 'romeo3'

我正在对您的数据做出一些合理的假设,但有可能存在不会突然出现的重叠,这会导致每个左连接上的 1:many 会破坏这一点。

关于sql - 如何在替代条件(2 个中的 1 个)条件下加入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212629/

相关文章:

java - Woocommerce 通过 php 设置 order_status 并触发电子邮件

json - 在Postgresql中生成带有计数的嵌套json

MySQL : Create view JOIN get max and min value from child table

mysql - 如何使用任意工作日作为一周的开始从 MySQL 中的日期中提取周?

SQL Server 与 ON 运算符

sql - postgresql 明显不工作

python - 注释相关模型中注释值的总和

python 写错误

mysql - 在 MySQL 中合并来自一张表的两个选择查询

c# - 日期时间有太多小数位