1

私は2つのテーブルを持っています:

製品

id    name
1     Product 1
2     Product 2
3     Product 3

製品サイズ

id    size_id    product_id
1     1          1
2     2          1
3     1          2
4     3          2
5     3          3

したがって、商品 1 には 2 つのサイズ (1、2) があります。商品 2 には 2 つのサイズ (1、3) があります。商品 3 には 1 つのサイズ (3) があります。

私がやりたいことは、サイズ 1 とサイズ 3 の両方を持つ製品 (つまり、製品 2) を引き戻すクエリを作成することです。サイズが 1 と 3の両方の商品を取得するクエリを簡単に作成できます。

select `products`.id, `products_sizes`.`size_id`
from `products` inner join `products_sizes` on `products`.`id` = `products_sizes`.`product_id`
where products_sizes.size_id IN (1, 3)
group by products.id

このクエリを実行すると、製品 1、製品 2、および製品 3 が返されます。

繰り返しますが、製品 2 のみを取得したいと思います。HAVING 句を使用して、$id IN GROUP_CONCAT(...) をいじってみましたが、何も機能させることができませんでした。よろしくお願いします。

4

4 に答える 4

1

1 と 3 の両方が必要なためCOUNT、結果が 2 になるようにする必要がありますsize_idIN (1, 3)

SELECT p.id AS id, p.name AS name
FROM   products p, products_sizes s
WHERE  p.id = s.product_id AND s.size_id IN (1, 3)
GROUP  BY s.product_id
HAVING COUNT(DISTINCT s.size_id) = 2;

ここでデモをチェックしてください。それがあなたのために働くかどうか私に知らせてください。

于 2013-06-14T02:52:37.790 に答える