繁体   English   中英

SQL - 仅在具有一个或多个选项的表上选择具有一个结果的行 - 关系表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM