[英]SQL - Select only rows with one result on table with one or multiple options - Relation Table
我有一张表,其中包含产品和颜色的关系。 每个产品都有一种或多种颜色。 是否可以执行仅返回只有一种颜色的产品的查询?
示例表:
+----+------------+----------+
| ID | product_id | color_id |
+----+------------+----------+
| 1 | 1 | 5 |
| 2 | 2 | 2 |
| 3 | 3 | 1 |
| 4 | 3 | 4 |
| 5 | 3 | 8 |
| 6 | 4 | 2 |
| 7 | 4 | 3 |
| 8 | 5 | 5 |
| 9 | 6 | 7 |
| 10 | 6 | 4 |
+----+------------+----------+
我希望只返回 ids : 1 , 2 , 8 。 (product_id : 1 , 2 , 5 )
*所有值(组合)都是唯一的。 我不能有两种颜色相同的产品 (color_id)。
只需使用having
:
select product_id, max(color_id)
from t
group by product_id
having count(*) = 1;
SELECT product_id
FROM table
GROUP BY product_id
HAVING MIN(color_id) = MAX(color_id)
即使(product_id, color_id)
未定义为 UNIQUE 也能正常工作。
select product_id, count(color_id) from table
group by product_id
having count(color_id) = 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.