检查行是否存在特定值

时间:2019-07-19 10:24:16

标签: sql postgresql

我有2个表tasktaskattributes。在两个带有taskid的表之间存在链接。每个taskid具有由key,value表示的多个属性。 我想找出任务的特定键是否存在

enter image description here

enter image description here

例如如果要检查所有没有键“ A”的任务,则在这里。

3 个答案:

答案 0 :(得分:1)

correlated subquerynot exists一起使用

select a.taskid, b.key, b.value
from task a inner join taskattributes b on a.taskid=b.taskid
where not exist 
     (select 1 from taskattributes c on c.taskid=b.taskid and key='A')

答案 1 :(得分:1)

使用not exists

select *
from task t
where not exists (
  select 1 from taskattributes
  where taskid = t.taskid and key = 'A'
)

答案 2 :(得分:0)

一个简单的解决方案使用聚合:

SELECT
    t.taskid,
    t.name
FROM task t
INNER JOIN taskattributes ta
    ON t.taskid = ta.taskid
GROUP BY
    t.taskid,
    t.name
HAVING
    COUNT(CASE WHEN "key" = 'A' THEN 1 END) = 0;

如果您使用的是Postgres 9.4或更高版本,则可以在FILTER子句中使用HAVING

HAVING COUNT(*) FILTER (WHERE "key" = 'A') = 0