在Redshift / Postgres中使用WHERE EXISTS语句来解决两个相互矛盾的情况?

时间:2016-08-30 16:56:52

标签: postgresql amazon-redshift

我正在寻找一个查询,给定一个id,名字和姓氏,返回对应于每个ID的ID,该ID至少有一行包含名字'Steve'和姓氏'Smith' ,除了至少一行对应于名字'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?

1 个答案:

答案 0 :(得分:1)

显然你可以用另一种方式写作。给我所有ID,其中至少有一个史蒂夫史密斯,但不是所有人都是史蒂夫史密斯。

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