如何在Postgres中编写一个包含两个表的包含查询?

时间:2019-03-20 15:34:19

标签: sql postgresql sql-like contains

我正在使用Postgres 9.5。我有一个带有label列的表...

    Table "public.article"
             Column             |           Type           |                           Modifiers                            
--------------------------------+--------------------------+----------------------------------------------------------------
    ...
 label                          | text                     | 

然后我有另一个带有特定单词的表...

mydb=> \d keyword;
                                 Table "public.keyword"
 Column |          Type          |                          Modifiers                           
--------+------------------------+--------------------------------------------------------------
 id     | integer                | not null default nextval('keyword_id_seq'::regclass)
 word   | character varying(200) | not null

如何编写查询以检查article的{​​{1}}是否包含(以不区分大小写的方式)label中的word中的一个keyword表?如果可以帮助加快速度,我愿意更改每种数据类型。

1 个答案:

答案 0 :(得分:0)

您可以使用ILIKE进行不区分大小写的模式匹配:

SELECT a.label
FROM article AS a
   JOIN keyword AS k
      ON a.label ILIKE '%' || l.word || '%';

如果两个表都很大,这将很慢,因为只能使用嵌套循环联接。我认为这是无法避免的。