从不相关的另一个 table 过滤带有 like 子句的列 - Postgresql?

Filtering selecting column with like clause from unrelated another table - Postgresql?

我有两个不相关的 table。它们都有 varchar 列。如果table B的文本列中的所有行都在table A的文本列中,我想像“全文搜索”一样过滤它。

例如:

一列行:

1- ABCD

2-DBCA

3- ACBD

B 列行:

1-BC

查询结束时的预期输出:

3- ACBD

无意义但仅供解释:

select text from table1 where text ilike concat('%', select text from table2, '%')

您认为我怎样才能以最有效的方式执行此查询?

您可以在没有 like '%BC%' 的情况下执行此操作,仅使用纯字符串匹配。 (不要指望它很快;你需要三元组来提高性能)


CREATE TABLE aaa
        ( ii integer not null primary key
        , vv varchar
        );
INSERT INTO aaa ( ii , vv ) VALUES ( 1, 'ABCD' ) , ( 2, 'DBCA' ) , ( 3, 'ACBD' );

CREATE TABLE bbb
        ( ii integer not null primary key
        , vv varchar
        );
INSERT INTO bbb ( ii , vv ) VALUES ( 1, 'BC' ) ;

SELECT * FROM aaa a
WHERE EXISTS (
        SELECT * FROM bbb b
        -- WHERE POSITION (b.vv IN a.vv) > 0 
        WHERE NOT POSITION (b.vv IN a.vv) > 0
        );

结果:


CREATE TABLE
INSERT 0 3
CREATE TABLE
INSERT 0 1
 ii |  vv  
----+------
  3 | ACBD
(1 row)