符合条件的所有行中的Mysql搜索字段

符合条件的所有行中的Mysql搜索字段,mysql,sql,algorithm,Mysql,Sql,Algorithm,首先,我知道这篇文章的标题没有恰当地描述情况,我会采纳任何建议来改变它 情况如下: 我有一个包含3列的表:itemName、keyField和value, 下面是一个例子: itemName | keyField | value ----------------------------------- pen | color | blue car | color | green pen | weight

首先,我知道这篇文章的标题没有恰当地描述情况,我会采纳任何建议来改变它

情况如下: 我有一个包含3列的表:itemName、keyField和value, 下面是一个例子:

itemName  |   keyField   |   value
-----------------------------------
pen       |   color      |   blue
car       |   color      |   green
pen       |   weight     |   10 grams
pen       |   weight     |   10 grams
chair     |   price      |   $30.00
chair     |   color      |   blue
shoes     |   brand      |   whatever
如您所见,该表用于动态存储项的任何属性。 我需要一个查询来搜索颜色为蓝色、重量为10克的所有项目,在这种情况下,这就是笔。 它还应该能够搜索所有蓝色物品(钢笔和椅子)


Mysql:5.7

您可以像这样使用聚合:

select itemname
from t
where (keyfield, value) in ( ('color', 'blue'), ('weight', '10 grams') )
group by itemname
having count(*) = 2;  -- both match

澄清一下:这个解决方案在我的情况下有效,因为itemName键域组合是唯一的。在itemName关键字字段可以重复的情况下,它不起作用。我想关键是count(*)=2条件。@ArmandoRodríguezacast。在这种情况下,逻辑也可以调整。
count(*)
是最简单的方法,它符合问题的需要。