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

+1

@ serg555:インデックスが使用されないため、正規表現のアプローチから優れたパフォーマンスを得ることはできません。私は全文検索アプローチをお勧めします。 – Asaph

+0

ええ、それはまた欠点があります:myisamテーブルだけ、1つのエンドワイルドカード。 – serg

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

オラクルでは、あなたが行うことができます:

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

あなたは、より複雑な正規表現を使用することができます。 'i'はそれを区別しません。 参照Oracle docs

関連する問題