希望在替代条件下进行表连接(此处,替换最初在特定列中找到的数据的子字符串)。所以我基本上想加入在特定列中找到的 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/