如何通过值组合选择项目

Posted

技术标签:

【中文标题】如何通过值组合选择项目【英文标题】: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) 水果(它的例子,在实际查询中,水果可以被几十个属性过滤)。有效结果 - 苹果和芒果(不是黄瓜、不是番茄等 - 只有具有所有所需特性的水果)。

这样的查询怎么写?

【问题讨论】:

【参考方案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。

【讨论】:

谢谢!这正是我想要的! 没有理由,你的回答很棒。昨天我无法单击“接受答案”复选标记(浏览器错误?网站错误?尝试了三遍)。现在我再次单击,复选标记变为绿色。

以上是关于如何通过值组合选择项目的主要内容,如果未能解决你的问题,请参考以下文章