使用PostgreSQL,如何在A列中搜索B列中的字符串匹配项?
中间表(子查询)输出:
string_a_id | string_a | string_b_id | string_b
-----------------------------------------------
1 'hello world' 11 null
2 'hello world' 13 null
3 'ipsum lorem' 21 'hello world'
查询上面的中间表是否匹配。 预期的输出:
string_a_id | string_a | string_b_id | string_b
-----------------------------------------------
1 'hello world' 21 'hello world'
2 'hello world' 21 'hello world'
我正在使用
select *
from (
// subquery
) as subquery_results
where (trim(subquery_results.string_a) ilike trim(subquery_results.string_b))
但这将返回0个结果。
答案 0 :(得分:1)
要比较每个string_a
与任何string_b
时,应使用自连接:
with dataset(string_a_id, string_a, string_b_id, string_b) as (
values
(1, 'hello world', 11, null),
(2, 'hello world', 13, null),
(3, 'ipsum lorem', 21, 'hello world')
)
select q1.string_a_id, q1.string_a, q2.string_b_id, q2.string_b
from dataset q1
join dataset q2 on trim(q1.string_a) ilike trim(q2.string_b)
string_a_id | string_a | string_b_id | string_b
-------------+-------------+-------------+-------------
1 | hello world | 21 | hello world
2 | hello world | 21 | hello world
(2 rows)
将初始查询中的values
替换为您的实际查询。