如何通过值组合选择项目

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。

【讨论】:

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

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

从组合框中选择项目时,如何从数据库中获取 ID 值?

C# CaliburnMicro:如何根据在数据网格中选择的项目自动在组合框中显示值?

选择项目后将多列组合框的值设置为所有列?

由于另一个组合框字符串值,如何更改组合框上的项目?

如何允许通过 Microsoft Access 中的组合框向表中添加值?

如何让组合框选择与 ExtJS6 中显示的值不同的值?