我有2个表task
和taskattributes
。在两个带有taskid
的表之间存在链接。每个taskid
具有由key,value
表示的多个属性。
我想找出任务的特定键是否存在
例如如果要检查所有没有键“ A”的任务,则在这里。
答案 0 :(得分:1)
将correlated subquery
与not 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