有一个 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
在查询中,我想放入一些名称的列表,检查同一对象中具有 key
列 status
的行的值是否具有状态 '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'));
关于sql - 查询元素依赖于另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52945948/