根据同一列上的where条件使用不同的过滤选项从表中选择详细信息

时间:2019-06-19 09:55:41

标签: sql entity-attribute-value

我有一个具有以下指定结构的表

Table structure

从表中,我只想获取具有值为 12 的Ram且具有 Blue 的颜色的产品ID。结果是1。 我尝试了很多查询,但并没有达到预期的结果。

解决方案是什么?

由于我们具有一组未定义的功能,因此很难为每个功能管理单独的表。

2 个答案:

答案 0 :(得分:1)

您可以使用条件聚合:

select productid
from t
group by productid
having max(case when feature = 'Ram' then value end) = '12' and
       max(case when feature = 'Color' then value end) = 'Blue';

答案 1 :(得分:0)

使用不存在的相关子查询

select distinct product_id from tablename a
where not exists 
     (select 1 from tablename b where a.product_id=b.product_id and feature='Ram' and value<>12)
and not exists 
     (select 1 from tablename c where a.product_id=c.product_id and feature='Color' and value<>'blue')