MySQLのように複数の値


144

このMySQLクエリがあります。

この内容のデータベースフィールドがあります

sports,shopping,pool,pc,games 
shopping,pool,pc,games 
sports,pub,swimming, pool, pc, games   

このようなクエリが機能しないのはなぜですか?スポーツかパブ、またはその両方のあるフィールドが必要ですか?

SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')

回答:


133

(a,b,c)リストはで動作しますin。の場合like、使用する必要がありますor

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

3
これは複数(5つ以上の動的検索可能クエリとしましょう)ではメリットがないため、正規表現を使用することをお勧めします。
Shayan Ahmad

315

これを行うより速い方法:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

これは:

WHERE interests REGEXP 'sports|pub'

このソリューションはここにあります:http : //forums.mysql.com/read.php?10,392332,392950#msg-392950

REGEXPの詳細はこちら:http ://www.tutorialspoint.com/mysql/mysql-regexps.htm


不明な量のキーワードを文字列(a | b | c ...)として渡す場合、LIKEを実行するには、正規表現が唯一の方法です。
頻繁

1
これがサブクエリで実行できるかどうか知っていますか?検索する必要のある単語の列があるとしましょう。「sports | pub」をサブクエリに置き換えるにはどうすればよいですか?
AdamMc331 2014年

%LIKE%ではなくLIKEのREGEXPを教えてください。正確な文字列をフェッチしようとしています...
Deepanshu Goyal 2015

3
このソリューションは、最初のソリューションを水から吹き飛ばします
Donato

2
列から正規表現の値を取得するには:(select group_concat(myColumn separator '|') from..)
daVe

34

REGEXPをお試しください。このようにしてみてください:

SELECT * FROM table WHERE interests REGEXP 'sports|pub'

5
うん!逆にしたいです。それがあるのでSELECT * FROM table WHERE interests NOT REGEXP 'sports|pub' (>‿◠)✌
Pathros

3
この回答は、jazkat5年前に提出された回答とどのように異なりますか?
Vaidas 2017

@ヴァイダス-ありがとう-同じ質問をしていた...:D
theFriedC

18

そのまま使用することもできRLIKEます。

例えば:

SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'

6
RLIKEとREGEXPは同義語であることを皆のためだけのノート
10億分の1の男

8

あなたのクエリは SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0

私が理解しているのは、テーブルの1つのフィールドに関心を格納しているということです。これは誤解です。あなたは間違いなく「金利」テーブルを持っている必要があります。


2
私はそうあるべきだと思いますがSELECT * FROM table WHERE find_in_set(interests, 'sports,pub')、この手法はほとんどの状況で正規表現よりも優れています。
クリスストリックランド

7

ANDパラメータの後にこの関数を使用する場合は、括弧を使用することを忘れないでください

このような:

WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')



1

その他の作業例:

SELECT COUNT(email) as count FROM table1 t1 
JOIN (
      SELECT company_domains as emailext FROM table2 WHERE company = 'DELL'
     ) t2 
ON t1.email LIKE CONCAT('%', emailext) WHERE t1.event='PC Global Conference";

タスクは、電子メール拡張子が複数の会社のドメインと等しい場合に、フィルターを使用してイベントの参加者をカウントすることでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.