在A列中搜索B列中的字符串匹配项

时间:2019-01-17 05:41:42

标签: postgresql search

使用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个结果。

1 个答案:

答案 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替换为您的实际查询。