1

私のデータベースでは、次のクエリを実行すると、出力として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);

しかし、なぜこれが起こっているのですか?

4

1 に答える 1

2

'NOT IN'演算子は、'NOTNULL'に対してのみ機能します。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;
于 2012-09-24T04:18:51.413 に答える