Postgresql 在Redshift/Postgres中使用WHERE EXISTS语句处理两个相互矛盾的条件?

Postgresql 在Redshift/Postgres中使用WHERE EXISTS语句处理两个相互矛盾的条件?,postgresql,amazon-redshift,Postgresql,Amazon Redshift,我希望编写一个查询,在给定id、名字和姓氏的情况下,除了至少有一行对应于名字“Steve”和姓氏“Smith”之外,还返回每个id对应的id,这些id至少有一行包含名字“Steve”和姓氏“Smith”。我尝试了下面的查询,但它返回0行 SELECT DISTINCT id FROM t WHERE EXISTS (SELECT 1 FROM t WHERE first_name = 'Steve' AND last_name != 'Smith') AND NOT EXISTS (SELECT

我希望编写一个查询,在给定id、名字和姓氏的情况下,除了至少有一行对应于名字“Steve”和姓氏“Smith”之外,还返回每个id对应的id,这些id至少有一行包含名字“Steve”和姓氏“Smith”。我尝试了下面的查询,但它返回0行

SELECT DISTINCT id FROM t
WHERE EXISTS (SELECT 1 FROM t WHERE first_name = 'Steve' AND last_name != 'Smith')
AND NOT EXISTS (SELECT 1 FROM t WHERE first_name = 'Steve' AND last_name = 'Smith')
我怀疑这是因为在一行中,两个条件不能同时为真,即使它们可以在同一ID的多行中都为真


我应该如何修改或重写此查询以返回感兴趣的ID?

显然,您可以用另一种方式编写此查询。如果至少有一个Steve Smith,但不是所有人都是Steve Smith,请给我所有身份证

select id
from t
group by id
having count(case when first_name = 'Steve' and last_name = 'Smith' then 1 end)
    between 1 and count(last_name) - 1

听起来你想要两个“存在”,但你用的是“不存在”。但是您可能还需要关联子查询。在您的情况下,两个子查询都是不相关的。它们不与外部查询耦合。你说的不相关是什么意思?你的内部查询可能应该说从t2开始,其中t2.id=t.id和t2.first\u name='Steve'。。。您将这两个查询绑定在一起,否则这些查询将在整个数据表中运行;就像在selectid中从一个whereexists中选择一个whereb.name='omg';顺便说一句:在您的情况下,EXISTS和notexists都可以为true,因为它们从同一个表中选择不同的集合