我不确定我的措词是否正确,请随时纠正我。以下是表格及其数据:
product category category_product
------- -------- ----------------
id_product id_category active id_category id_product
1 1 1 1 1
2 2 1 2 1
3 3 0 1 2
4 0 2 2
3 2
3 3
4 3
我只需要选择所有类别都处于非活动状态的那些产品。例如:
1
是好的,因为它属于积极类别(1
,2
)。2
是好产品,因为它至少有一个有效的类别(1
,2
;3
-无效)3
必须选择产品,因为其所有类别均处于非活动状态(3
,4
)。我有以下查询,这显然是不正确的,因为它选择了两个产品:2
和3
:
SELECT p.id_product
FROM product p
JOIN category_product cp
ON p.id_product = cp.id_product
JOIN category c
ON c.id_category = cp.id_category
WHERE
c.active = 0;
这是SQL Fiddle:http://sqlfiddle.com/#!2 / 909dd / 2/0
我该如何解决?
考虑以下:
SELECT p.*
, COUNT(*)
, SUM(c.active = 1) active
, SUM(c.active = 0) inactive
FROM product p
JOIN category_product cp
ON cp.id_product = p.id_product
JOIN category c
ON c.id_category = cp.id_category
GROUP
BY p.id_product;
+------------+----------+--------+----------+
| id_product | COUNT(*) | active | inactive |
+------------+----------+--------+----------+
| 1 | 2 | 2 | 0 |
| 2 | 3 | 2 | 1 |
| 3 | 2 | 0 | 2 |
+------------+----------+--------+----------+
http://sqlfiddle.com/#!2/909dd/55
这个问题的最后一部分留给读者练习
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句