• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQL 副問い合わせ(IN)での部分一致検索)

MySQL副問い合わせ(IN)での部分一致検索の方法を教えてください

このQ&Aのポイント
  • MySQL ver.5.1を使用して、メールアドレス帳から特定のキーワードを含む行のみ選択する方法を教えてください。
  • 完全一致の場合は副問い合わせ(IN)を使用してSELECT文を実行できますが、部分一致の場合はどのように実現できるのかわかりません。
  • テーブルmail_listのname列の値がテーブルkeywordの値に部分一致する行を抽出するSQL文を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ky072
  • ベストアンサー率60% (85/140)
回答No.2

こんな感じでいかがでしょう。 keyword を主にしたクエリです。 SELECT ml.* FROM keyword kw INNER JOIN mail_list ml ON (0<LOCATE(kw.name,ml.name)) GROUP BY ml.id; また、EXISTS を使う方法もあります。 SELECT * FROM mail_list ml WHERE EXISTS (SELECT 1 FROM keyword kw WHERE 0<LOCATE(kw.name,ml.name)); ちなみに正規表現や LIKE を使うのであれば、 keyword のデータに特殊文字が含まれる場合の注意が必要です。 例えば、正規表現では「(」「)」や「|」、LIKE では「%」や「_」などです。

faio5468ss
質問者

お礼

なるほど、、 LOCATEを使うんですね。両方式ともうまくいきました。 シンプルなSQL文で理解しやすかったです。 2パターンもご回答ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

正規表現でどうでしょう? SELECT * FROM mail_list WHERE name REGEXP ( SELECT group_concat(name SEPARATOR '|') FROM keyword )

faio5468ss
質問者

お礼

早速のご回答ありがとうございます。 ばっちり結果が得られました! REGEXPとgroup_concatの組み合わせですね。 スゴイ!大変勉強になります。

すると、全ての回答が全文表示されます。

関連するQ&A