从不相关的另一个表Postgresql中筛选具有like子句的列



我有两个不相关的表。它们都有varchar列。如果表B文本列中的所有行都在表A的文本列中;全文搜索";。

例如:

一列行:

1-ABCD

2-DBC

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)

最新更新