【问题标题】:SQL - Select only rows with one result on table with one or multiple options - Relation TableSQL - 在具有一个或多个选项的表上仅选择具有一个结果的行 - 关系表
【发布时间】:2020-10-06 13:40:17
【问题描述】:

我有一张包含产品和颜色关系的表格。 每个产品都有一种或多种颜色。 是否可以进行仅返回仅具有一种颜色的产品的查询?

示例表:

+----+------------+----------+
| 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)。

【问题讨论】:

    标签: mysql sql postgresql


    【解决方案1】:

    只需使用having:

    select product_id, max(color_id)
    from t
    group by product_id
    having count(*) = 1;
    

    【讨论】:

    • 作品 :) !我完全忘记了having
    • @akina 是的,所有值(组合)都是唯一的。我不能有两种颜色相同的产品 (color_id)。
    • 嗯,在 color_id = 5 的情况下没有工作(结果:1、5)
    • @bmpf_pt fiddle 不同意你的看法。再检查一次。
    【解决方案2】:
    SELECT product_id 
    FROM table
    GROUP BY product_id 
    HAVING MIN(color_id) = MAX(color_id)
    

    即使(product_id, color_id) 未定义为 UNIQUE,也能正常工作。

    【讨论】:

    • 嗯,在 color_id = 5 的情况下没有工作(结果:1、5)
    • @bmpf_pt have is not working with where color_id = 5 (Results : 1, 5 ) fiddle 不同意你的看法。再检查一次。
    • 立即查看:dbfiddle.uk/…
    • @bmpf_pt 一切都是正确的。您只选择具有color_id = 5 的行。所有这些product_id 都被返回了——怎么了? PS。在您的问题中,我对color_id = 5 一无所知... PPS。虽然 color_id = 5 既不需要 GROUP BY 也不需要 HAVING,但 SELECT DISTINCT 就足够了(对于唯一的 (product_id, color_id) 甚至不需要 DISTINCT - 简单的 SELECT)。
    【解决方案3】:
    select product_id, count(color_id) from table
    group by product_id
    having count(color_id) = 1
    

    【讨论】:

    • 嗯,在 color_id = 5 的情况下没有工作(结果:1、5)
    • ONLY_FULL_GROUP_BY 时出现语法错误,否则结果不正确。
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    相关资源
    最近更新 更多