前提
とある製品の検索サイトを作っています。
多対多の関係を持つ「製品テーブル」と「タグテーブル」と、その「中間テーブル」があります。
製品テーブル(products)
id | name |
---|---|
1 | 製品A |
2 | 製品B |
タグテーブル(tags)
id | name |
---|---|
1 | タグA |
2 | タグB |
中間テーブル(product_tag)
id | product_id | tag_id |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 1 |
実現したいこと
多対多の関係を持つ製品テーブルの中からタグA,B両方を持つ製品を検索したい。
→ このケースにおいては、製品Aのみの取得。
発生している問題
どのようなクエリを発行すれば、条件に合致するレコードが取得できるかが分からない。
試したこと
1.WHERE IN での検索
→ 製品A,Bの両方が取得されてしまう。
where_in.sql
1select 2 * 3from 4 `products` 5where 6 exists ( 7 select 8 * 9 from 10 `tags` 11 inner join `product_tag` on `tags`.`id` = `product_tag`.`tag_id` 12 where 13 `products`.`id` = `product_tag`.`product_id` 14 and `tags`.`id` in (1, 2) 15 );
2. WHERE AND WHERE... での検索
→ 一件も商品が取得されない。
where_and.sql
1select 2 * 3from 4 `products` 5where 6 exists ( 7 select 8 * 9 from 10 `tags` 11 inner join `product_tag` on `tags`.`id` = `product_tag`.`tag_id` 12 where 13 `products`.`id` = `product_tag`.`product_id` 14 and `tags`.`id` = 1 15 and `tags`.`id` = 2 16 ); 17
補足情報(FW/ツールのバージョンなど)
DB: MySQL 8.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/07 05:42
2022/12/07 08:05
2022/12/07 10:02