我有一个包含列的表格&product; id'和' property_id'。一些具有20和20的属性的产品。 21,其中一些只有20或21。
product_id property_id
1 20
1 21
2 20
3 21
3 20
4 21
我需要获得同时具有property_id 20和21的产品列表。在这里我需要产品列表1& 3如下,
product_id
1
3
答案 0 :(得分:1)
这应该会给你正确的结果。
select product_id
from `xy`
where property_id in (20,21)
group by product_id
having count( distinct property_id)=2
答案 1 :(得分:1)
使用IN
和COUNT(distinct property_id)
:
SELECT product_id
FROM TableName
WHERE property_id IN (20,21)
GROUP BY product_id
HAVING COUNT(distinct property_id) = 2
<强>解释强>
IN
检查property_id
的值是否为20或21。
COUNT (distinct property_id) = 2
验证有两个不同的property_id
值。因此,当产品2在property_id
中有两个相同的值(20,20)时,它将不会被选中。
<强>结果:强>
product_id
----------
1
3
SQL Fiddle中的示例结果。
答案 2 :(得分:0)
使用 IN 检查多个值。
Select product_id
from products
where property_id in(20,21)
group by product_id
having count(property_id) >=2
答案 3 :(得分:-1)
SELECT `product_id` FROM TableName
WHERE `property_id` IN (20,21)
GROUP BY `product_id`
HAVING COUNT(*) = 2