![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
MySQL ver.5.1を使用。
メールアドレス帳(数千件)より、宛名に特定のキーワードが含まれる行のみ選択したいと考えてます。
対象となるキーワードが多数ありすぎるため、別テーブルに格納してあります。
副問い合わせ(IN)を使用して、
下記テーブル:mail_listのname列のうち、
テーブル:keywordの値を含む行のみ抽出したいと思います。
完全一致『受付』⇔『受付』といったようなものであれば、
SELECT * FROM mail_list WHERE name IN (SELECT name FROM keyword);
で結果が得られるのですが、
『技術部』⇔『部』、『営業部』⇔『部』
のように部分一致させるという条件の場合、方法がなかなか思いつきません。
どのようなSQLで実現できますか。
ご教示くださいませ。
■テーブル:mail_list
id | name | address |
――――――――――――――
1 | 技術部 | aaa@aaaa |
2 | 営業部 | bbb@bbbb |
3 | 駐車場 | ccc@cccc |
4 | 受付 | ddd@dddd |
5 | 社長室 | eee@eeee |
■テーブル:keyword
name |
――――
受付 |
部 |
×× |
○○ |
△△ |
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 では「%」や「_」などです。
なるほど、、
LOCATEを使うんですね。両方式ともうまくいきました。
シンプルなSQL文で理解しやすかったです。
2パターンもご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Oracle SQL update方法 2 2022/06/22 14:07
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
割合(パーセント)を求めるに...
-
MySQL 副問い合わせ(IN)での...
-
【MYSQL】asでリネームしてwher...
-
大至急!!!DBに存在する全表...
-
使うべきでない文字。
-
重複が
-
MySQLで変数やループ、上位3名...
-
MySQLで MAX()とGROUP BYを使う...
-
カウント結果を1レコードの中...
-
初心者Mysqlの関数のsubstring...
-
何にかが違うから エラーなんで...
-
条件検索の方法について
-
Access でレコードセレクタが押...
-
Accessで別テーブルの値をフォ...
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
ちなみになぜv=(v・e1)e1+(v・e...
-
ACCESSで大量の更新を行うと「...
-
エクセル関数 文字(ハイフン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
【MYSQL】asでリネームしてwher...
-
使うべきでない文字。
-
割合(パーセント)を求めるに...
-
チェックボックスの項目をDBにi...
-
カウント結果を1レコードの中...
-
SQLの集計で「全て」の合計も表...
-
月別、販売員別の集計がわかり...
-
sum()の出力結果順に並び替えを...
-
MySQLで MAX()とGROUP BYを使う...
-
【初歩】ラジオボタンをつかっ...
-
何にかが違うから エラーなんで...
-
複数の表の条件でのDELETE文
-
replaceした上でwhere
-
LIKE述語/SQLとPHPを使った検...
-
今週の日曜日から土曜日までの...
-
重複が
-
MySQLにて特定レコードのみを抽...
-
MySQLで2つのテーブルのデータ...
-
phpmyadminはトリガーやIF文を...
おすすめ情報