如何通过值组合选择项目
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。
【讨论】:
谢谢!这正是我想要的! 没有理由,你的回答很棒。昨天我无法单击“接受答案”复选标记(浏览器错误?网站错误?尝试了三遍)。现在我再次单击,复选标记变为绿色。以上是关于如何通过值组合选择项目的主要内容,如果未能解决你的问题,请参考以下文章
C# CaliburnMicro:如何根据在数据网格中选择的项目自动在组合框中显示值?