Postgres - 根据表B中的字符串搜索表A的行

时间:2018-03-11 22:03:48

标签: sql postgresql

我有两个表,一个(表A),里面有产品(名称,价格等),另一个表只有字符串(一个表有一列"关键字")。

我如何构建一个查询,该查询从表A" productName"中提取所有产品。它包含表B""关键字"中的任何字符串。列?

表A:

| productId      | productName | Price
| -------------  | ----------- | -------
| 0              | Red Shoe    | 100
| 1              | Yellow Boot | 20
| 2              | Scarf       | 30
| 3              | Cardigan    | 40

表B:

| Keywords      |
| ------------- |
| Scarf     |
| Shoe      |
| Red |

我会得到红鞋和围巾作为我的结果

2 个答案:

答案 0 :(得分:1)

create table product(productId int, productName text, Price int);
insert into product values
(0, 'Red Shoe', 100),
(1, 'Yellow Boot', 20),
(2, 'Scarf', 30),
(3, 'Cardigan', 40);

create table keywords(kwords text);
insert into keywords values
( 'Scarf'),('Shoe'),('Red');

我建议您查看Postgres Full Text Search

select *
from   product
       ,lateral (select kwords from keywords) k
where productName like '%' || kwords || '%'
productid | productname | price | kwords
--------: | :---------- | ----: | :-----
        2 | Scarf       |    30 | Scarf 
        0 | Red Shoe    |   100 | Shoe  
        0 | Red Shoe    |   100 | Red   

dbfiddle here

答案 1 :(得分:1)

我会这样做:

select p.*
from product p
where exists (select 1
              from keywords k
              where p.productName like '%' || k.keyword || '%'
             );

如果关键字可以相互包含,则存在潜在危险。例如,“鞋带”总是匹配“鞋”。