我有一个包含文本字段(摘要)的表。我最近收到了一个请求,要求在该字段中查询是否出现一长串字符串。例如,我想在“summary”字段中搜索这些字符串的任何出现:
- 苹果
- 香蕉
- 萝卜
- 狗
- 大象
- ... x 50 多个项目
- 斑马
我可以编写一个简单的查询来返回包含任何这些值的行的 ID?
我有一个包含文本字段(摘要)的表。我最近收到了一个请求,要求在该字段中查询是否出现一长串字符串。例如,我想在“summary”字段中搜索这些字符串的任何出现:
我可以编写一个简单的查询来返回包含任何这些值的行的 ID?
你可以把它们放在一个巨大的正则表达式中:
select t.*
from t
where summary similar to '%((apple)|(banana)|(carrot)|(dog)| . . .|(zebra))%';
另一种选择,如果您想要更大的灵活性并且更不在乎性能:
with tosearch as (
select '%apple%' as pattern union all
. . .
select '%zebra%'
)
select t.*
from t join
tosearch
on t.summary like tosearch.pattern;
我想到的最简单的方法是这样的:
SELECT "ID" FROM table WHERE "summary" IN ('apple', 'banana', 'carrot', 'dog', ....)
试试这个。
评论后编辑:使用类似于运算符:
select "ID" from table where upper("summary") similar to upper('%((apple)|(banana)|...|(zebra))%')
使用正则表达式:
select * from mytable
where summary similar to '%(apple|banana|carrot|dog)%'
请参阅此工作的SQLFiddle