私のデータベースでは、次のクエリを実行すると、出力として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
しかし、このクエリを実行すると、期待していた618ではなく0が返されます。
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);
私はPostgreSQL9.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);
しかし、なぜこれが起こっているのですか?