sql - 查询元素依赖于另一个

标签 sql postgresql

有一个 Postgres 数据库,表有三列。数据结构在外部系统中,所以我无法修改它。

每个对象由三行表示(由 element_id 列标识 - 此列中具有相同值的行表示相同的对象),例如:

key     value            element_id
-----------------------------------
status  active           1
name    exampleNameAAA   1
city    exampleCityAAA   1
status  inactive         2
name    exampleNameBBB   2
city    exampleCityBBB   2
status  inactive         3
name    exampleNameCCC   3
city    exampleCityCCC   3

在查询中,我想放入一些名称的列表,检查同一对象中具有 keystatus 的行的值是否具有状态 'active' 和仅当状态为“事件”时才返回此对象的名称。

所以对于这个例子,数据库表中有三个对象。我想查询两个“名称”:

a)exampleNameAAA

b)exampleNameCCC

结果应该是: exampleNameAAA(因为我请求了两个对象,而其中只有一个在 status 行中具有 active 值。

最佳答案

您可以使用 EXISTS 查询:

select e1.*
from element e1
where (e1.key, e1.value)  in ( ('name', 'exampleNameAAA'), ('name', 'exampleNameCCC'))
and exists (select *
            from element e2
            where e2.element_id = e1.element_Id  
              and (e2.key, e2.value) = ('status', 'active'));

在线示例:https://rextester.com/JOWED21150

关于sql - 查询元素依赖于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52945948/

相关文章:

php - 带连接的 SQL SELECT 可排除用户已回答的项目

sql - 当我(手动)将表值函数的结果缓存在临时表中时,为什么查询执行得如此之快?

sql - 在 Microsoft Visual Basic 6.0 中填充组合框

sql - 优化 PostgreSql 查询以获取找到的记录总数和基于多个 group by 的分页所需的有限行数

sql - 如何将 Oracle Sql 转换为 Postgresql

mysql - SQL:从我的 sql 查询的日期值中减去 1 天

mysql - SQL NOT IN 结果不符合预期

postgresql 无法在模式中创建表

mysql - 如何将 SQL 查询转换为 Rails Active Record 查询?

mysql - 用于存储词典列表的数据库