【问题标题】:How to select items by their values combination如何通过值组合选择项目
【发布时间】:2021-06-30 17:40:20
【问题描述】:

我的示例表 - fruits

+----------+----------+-------+
| FRUIT    | PROPERTY | VALUE |
+----------+----------+-------+
| APPLE    | COLOR    | GREEN |
| APPLE    | COLOR    | RED   |
| APPLE    | FORM     | ROUND |
| CUCUMBER | COLOR    | GREEN |
| CUCUMBER | COLOR    | LONG  |
| KIWI     | COLOR    | GREEN |
| MANGO    | COLOR    | GREEN |
| MANGO    | FORM     | ROUND |
| TOMATO   | FORM     | ROUND |
+----------+----------+-------+

每个水果都有无限的属性,但现在从 1 到 2。每个属性可以有无限的值。 我想选择所有 GREEN (COLOR) 和 ROUND (FORM) 水果(它的例子,在实际查询中,水果可以被几十个属性过滤)。有效结果 - 苹果和芒果(不是黄瓜、不是番茄等 - 只有具有所有所需特性的水果)。

这样的查询怎么写?

【问题讨论】:

    标签: mysql select group-by


    【解决方案1】:

    您可以过滤表格以获得所需的属性,按水果分组并检查HAVING子句是否满足所有属性:

    SELECT fruit
    FROM fruits
    WHERE (property = 'COLOR' AND value = 'GREEN')
       OR (property = 'FORM' AND value = 'ROUND')
    GROUP BY fruit
    HAVING COUNT(DISTINCT value) = 2
    

    或者:

    SELECT fruit
    FROM fruits
    WHERE (property, value) IN (('COLOR', 'GREEN'), ('FORM', 'ROUND'))
    GROUP BY fruit
    HAVING COUNT(DISTINCT value) = 2
    

    请参阅demo

    【讨论】:

    • 谢谢!这正是我想要的!
    • 没有理由,你的回答很棒。昨天我无法单击“接受答案”复选标记(浏览器错误?网站错误?尝试了三遍)。现在我再次单击,复选标记变为绿色。
    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多