2009-10-30 97 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

相關問題