我不确定我是否正确表达了这个问题,请随时纠正我。以下是他们的数据表:如何选择在其他表中具有全部或无相应值的行?
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小提琴:http://sqlfiddle.com/#!2/909dd/2/0
我怎样才能解决这个问题?
这是一个很好的答案!我比其他人更喜欢它,因为它不包含嵌套的'select',并提供有关产品的额外信息。 –