我能在MySQL的"IN"语句中使用通配符吗?

18

我想要运行类似这样的代码:

select * from table where field in ("%apple%", "%orange%")

有没有一种方法?或者至少比为每个关键字动态构建查询更好的方法:

select * from table where field like "%apple%" or field like "%orange%"

谢谢。

4个回答

20

我不确定它是否比你想出来的更好,但你可以使用MySQL的正则表达式功能

select * from my_table where field rlike 'apple|orange';

此外,正如其他人所提到的,您可以使用 MySQL 的全文搜索 功能(但仅适用于使用 MyISAM 引擎的情况)。


是的,看起来这是最简单的方法。谢谢。希望它不会对性能产生太大影响。 - serg
1
@serg555:我认为你不会从正则表达式方法中获得良好的性能,因为没有使用索引。我建议采用全文搜索方法。 - Asaph
是的,但它也有它的缺点:只支持MyISAM表,只支持单边通配符。 - serg

2
也许更好的解决方案是使用针对全文索引进行布尔搜索

编辑:我查了一下,它只支持在单词的末尾使用通配符:

ALTER TABLE table ADD FULLTEXT INDEX (field);

SELECT * FROM table WHERE MATCH (field)
AGAINST ('orange* apple*' IN BOOLEAN MODE);

1

-2
在Oracle中,您可以执行以下操作:
select * from table where
regexp_like (column, 'apple|orange', 'i')

您可以使用更复杂的正则表达式。'i'使其不区分大小写。 请参考Oracle文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接