我有两个表,一个(表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 |
我会得到红鞋和围巾作为我的结果
答案 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 || '%'
);
如果关键字可以相互包含,则存在潜在危险。例如,“鞋带”总是匹配“鞋”。