SELECT COUNT(1) FROM own.no_preselection_1_a; SELECT COUNT(1) FROM own.no_preselection_1; COUNT(1) を選択 (SELECT DISTINCT * FROM own.no_preselection_1_a ); COUNT(1) を選択 (SELECT DISTINCT * FROM own.no_preselection_1 ); カウントを選択(1) FROM OWN.no_preselection_1 t1 INNER JOIN OWN.no_preselection_1_a t2 ON t1.number = t2.number AND t1.location_number = t2.location_number;
これは以下を返します:
カウント(1) ---------------------- 398 カウント(1) ---------------------- 398 カウント(1) ---------------------- 308 カウント(1) ---------------------- 308 カウント(1) ---------------------- 578
ここで結合の視覚的な説明を見ると: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
問題はその最後のクエリにあります。セットが同じである場合 (つまり、完全にオーバーラップしている場合)、内部結合は元のセットのサイズのセットを返すと考えていました。
重複のそれぞれが互いのエントリを作成しているという問題はありますか? (たとえば、各テーブルに同じ値の重複が 3 つある場合、3x3 = 9 エントリが作成されますか?) ここでの解決策は何ですか? (内部結合を行うために個別を選択するだけですか?) これは、2 つのテーブルに同じデータが含まれているかどうかを確認するための適切なテストですか?