You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询需求:获取符合多属性条件的ProjectNo值

解决EAV结构表多属性匹配的SQL查询问题

针对你这种键值对(EAV)结构的数据表,要筛选出同时满足Manager = "Bob"、Prop1 = "foo"和Prop2 = "bar"的ProjectNo,这里有几种实用的写法:

方法1:GROUP BY + HAVING(最直观的通用写法)

通过分组统计符合条件的属性数量,确保目标项目同时满足所有要求:

SELECT ProjectNo
FROM your_table_name
WHERE (Property = 'Manager' AND Value = 'Bob')
   OR (Property = 'Prop1' AND Value = 'foo')
   OR (Property = 'Prop2' AND Value = 'bar')
GROUP BY ProjectNo
HAVING COUNT(DISTINCT Property) = 3;

思路说明:

  • 先筛选出所有符合单个条件的记录
  • 按ProjectNo分组后,检查分组内的不同属性数量是否等于3(对应我们的3个条件)
  • 只有同时具备三个指定属性值的项目才会被保留

方法2:自连接写法(条件较多时逻辑更清晰)

把同一张表多次自连接,每次匹配一个属性条件:

SELECT t1.ProjectNo
FROM your_table_name t1
JOIN your_table_name t2 ON t1.ProjectNo = t2.ProjectNo
JOIN your_table_name t3 ON t1.ProjectNo = t3.ProjectNo
WHERE t1.Property = 'Manager' AND t1.Value = 'Bob'
  AND t2.Property = 'Prop1' AND t2.Value = 'foo'
  AND t3.Property = 'Prop2' AND t3.Value = 'bar';

思路说明:

  • 每个自连接对应一个属性条件,通过ProjectNo关联同一个项目的不同属性记录
  • 最终只有同时满足三个连接条件的ProjectNo会被筛选出来

方法3:子查询+IN(简洁易懂的写法)

通过多个子查询筛选出符合单个条件的项目,再取交集:

SELECT ProjectNo
FROM your_table_name
WHERE Property = 'Manager' AND Value = 'Bob'
AND ProjectNo IN (
    SELECT ProjectNo FROM your_table_name WHERE Property = 'Prop1' AND Value = 'foo'
)
AND ProjectNo IN (
    SELECT ProjectNo FROM your_table_name WHERE Property = 'Prop2' AND Value = 'bar'
);

思路说明:

  • 先锁定Manager为Bob的项目,再从中筛选出同时存在Prop1=foo和Prop2=bar的项目
  • 逻辑直白,新手也能快速理解

记得把语句里的your_table_name替换成你实际的表名,这三种方法都能返回预期结果1。

内容的提问来源于stack exchange,提问作者user2701631

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:58:57