【发布时间】:2016-08-30 16:56:52
【问题描述】:
我希望编写一个查询,给定一个 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?
【问题讨论】:
-
听起来您想要两个
exists,但您使用了not exists。但您可能还需要关联您的子查询。 -
在您的情况下,两个子查询都是不相关的。 (它们不耦合到外部查询)
-
“不相关”是什么意思?
-
您的内部查询可能应该说
from t t2 where t2.id = t.id and t2.first_name = 'Steve' ...您将两者联系在一起,否则这些查询将在整个数据表中运行。 -
它们与外部查询没有逻辑关系;就像在
select id from a where exists (select 1 from b where b.name = 'omg' );BTW 中一样:在您的情况下,EXISTS() 和 NOT EXISTS() 都可以为真,因为它们从同一个表中选择不同的集合)
标签: postgresql amazon-redshift