2009-10-30 117 views
11

我想运行是这样的:我可以在“IN”MySQL语句中使用通配符吗?

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

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

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

谢谢。

回答

13

我不知道这是任何比你来干什么了,但你可以使用MySQL's regex capabilities更好:

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

而且,正如其他人所说,你可以使用MySQL's full text search能力(但只有当你使用MyISAM引擎)。

+0

是的,看起来像最简单的方法。谢谢。希望它不会影响性能。 – serg 2009-10-30 21:15:56

+1

@ serg555:我不认为你会得到良好的表现出正则表达式的方法,因为没有索引将被使用。我会推荐全文搜索方法。 – Asaph 2009-10-30 21:33:27

+0

是的,但它也有其缺点:只有myisam表,只有一端通配符。 – serg 2009-10-30 22:09:03

1

也许更好的解决方案是使用boolean search against a fulltext index

编辑:我看着它,它只是在年底的话支持通配符:

ALTER TABLE table ADD FULLTEXT INDEX (field); 

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

在Oracle中,你可以这样做:

select * from table where 
regexp_like (column, 'apple|orange', 'i') 

可以使用更复杂的正则表达式。 '我'使它不敏感。 请参阅Oracle docs

相关问题