【MYSQL】アプローチの異なるAND検索を実現する

SQLを成形してAND検索を実現する際、
アプローチの仕方によってAND検索の実現方法が違ってきます。

  • 特定のレコードに対して、AND検索を実現する
  • 複数のレコードに対して、AND検索を実現する

1. 特定のレコードに対して、AND検索を実現する

以下のようなテーブル(fruits)があるとします。

idshop_idname
11apple
21orange
32apple and orange

この時、appleかつorangeの単語が含まれるレコードを取得したいとします。
appleやorangeだけではダメで、
両方の単語が入っていることが条件となります。
これは以下のSQLを成形することで実現することができます。
(ここではid:3が取得できます)

SELECT * FROM fruits WHERE name LIKE ‘%apple%’ AND name LIKE’ %orange%’;

SQLのWHERE句にANDを使って検索したい条件を
くっつけるだけで実現できます。

2. 複数のレコードに対して、AND検索を実現する

今度は特定のレコードではなく、
複数のレコードをまたいでAND検索を実現したいとします。
例えば、appleとorangeを扱っているお店のIDを取得したい場合など。
(id:3は、appleとorangeのセット商品のようなもので、便宜上、今回の検索対象とは違うものとお考えください)
これは以下のSQLを成形することで実現することができます。
(ここではshop_id:1の2件が取得できます)

SELECT * FROM fruits WHERE shop_id IN ( SELECT t1.shop_id FROM ( SELECT DISTINCT(shop_id) FROM fruits WHERE name = ‘apple’) t1, ( SELECT DISTINCT(shop_id) FROM fruits WHERE name = ‘orange’) t2 WHERE t1.shop_id = t2.shop_id)

SELECTとDISTINCTを使って、複数回のサブクエリを実行しています。
少しややこしいですが、これで複数レコードをまたいだ
AND検索が実現できます。

ABOUTこの記事をかいた人

フリーランスとして働く、フルスタックエンジニア 初崎 匠のサイト。仕事のことから趣味のアニメーション制作、英語学習など、様々なことを通じて、少しでも多くの人が幸せになれるような価値を提供できるよう挑戦し続けます。