【发布时间】:2016-02-16 23:17:43
【问题描述】:
我正在使用以下查询在 Amazon Redshift 上获得零结果。
查询 1:
SELECT id
FROM flx2.groups
WHERE id NOT IN (SELECT groupid FROM flx2.lmsprovidergroups)
现在,如果我将相同的查询稍微修改为:
查询 2:
SELECT id
FROM flx2.groups
WHERE id NOT IN (SELECT id
FROM flx2.groups
WHERE id IN (SELECT groupid FROM flx2.lmsprovidergroups))
我试图从lmsprovidergroups 中排除id,以从groups 中获取一个子集。为什么我必须先包含它(如查询 2 中的内部查询)然后再次排除它?
就我而言,查询 1 与查询 2 完全相同。
为什么查询 2 有效而查询 1 无效?
【问题讨论】:
-
使用
LEFT JOIN会更容易。而且这两个查询完全不同。 -
@JakubKania:您是否可以阐明这些查询有何不同?我知道我想出了它们,但我看不出它们有什么不同。我的意思是,当然,一个产生结果,另一个没有,它们必须不同。但是如何,为什么?
-
flx2.groups.id中有任何nulls?顺便说一句:IN或NOT IN子句的子选择中的distinct没有用 -
@a_horse_with_no_name:我同意
distinct在这种情况下没用。在flx2.groups.id中没有nulls。 -
flx2.lmsprovidergroups.groupid中有空值吗?
标签: sql postgresql null amazon-redshift