在我运行以下查询的数据库中,我得到1077作为输出。
select count(distinct a_t1) from t1;
然后,当我运行此查询时,我得到459。
select count(distinct a_t1) from t1
where a_t1 in (select a_t1 from t1 join t2 using (a_t1_t2) where a_t2=0);
以上是相同的,这个查询也给出了459:
select count(distinct a_t1) from t1 join t2 using (a_t1_t2) where a_t2=0
但是当我运行这个查询时,我得到0而不是618,这是我期待的:
select count(distinct a_t1) from t1
where a_t1 not in (select a_t1 from t1 join t2 using (a_t1_t2) where a_t2=0);
我正在运行PostgreSQL 9.1.5,这可能不是必需的。请在上面的查询中指出我的错误。
更新1: 我创建了一个新表,并将上面子查询的结果输出到该表中。然后,我跑了几个问题:
select count(distinct a_t1) from t1
where a_t1 not in (select a_t1 from sub_query_table order by a_t1 limit 10);
和万岁!现在我得到10作为答案!我能够将限制增加到450.之后,我又开始变为0。
更新2:
sub_query_table中有459个值。最后,这个查询给了我所需的答案:
select count(distinct a_t1) from t1
where a_t1 not in (select a_t1 from sub_query_table order by a_t1 limit 459);
在这个位置,给出0作为答案:
select count(distinct a_t1) from t1
where a_t1 not in (select a_t1 from sub_query_table);
但是,为什么会发生这种情况?
答案 0 :(得分:1)
'NOT IN'运算符仅适用于'NOT NULL'。值为null的列不匹配。
select count(distinct a_t1) from t1
where a_t1 not in (select a_t1 from t1 join t2 using (a_t1_t2) where a_t2=0) OR a_t1 IS NULL;