我有一个存储产品组的表。
table "products_groups"
id | id_group | id_product
============================
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 2 | 2
6 | 3 | 2
我需要一个SQL查询,它将找到包含给定数组中所有id_product的id_group。
product_ids = array(1); // should return no results
product_ids = array(1,2); // should only return id_group 2
product_ids = array(1,2,3); // should only return id_group 1
product_ids = array(1,2,3,4); // should return no results
我在周围玩耍/搜索,最后被困在
SELECT p1.id_group
FROM products_groups p1, products_groups p2
WHERE p1.id <> p2.id
AND p1.id_group = p2.id_group
AND (
p1.id_product = 1
OR p1.id_product = 2
OR p1.id_product = 3
)
但显然没有给我我想要的结果。我不知道我是在想太简单还是太复杂。
注意:当然,id_product值将在SQL中动态生成。它最终将与PHP / Codeigniter一起使用
背景信息:每种产品都有价格,但产品可以在具有包装价格的产品组中。这就是为什么我需要知道每个订单的产品是否在一个组中。
答案 0 :(得分:3)
此问题称为Relational Division
<击> 撞击>
<击>SELECT id_group
FROM products_groups
WHERE id_product IN (1,2)
GROUP BY id_group
HAVING COUNT(*) = 2
击> <击> 撞击>
或类似的东西,
SELECT id_group
FROM products_groups
GROUP BY id_group
HAVING SUM(id_product IN (1,2)) = COUNT(*) AND
COUNT(*) = 2