从不相关的另一个 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)
我有两个不相关的 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)