4

table1 の列と table2 の同じ列が等しくない 2 つのテーブルと出力結果を比較しようとしています。

クエリは次のようになります。

Select Table1.Column1, Table1.Column2, Table1.Column3, Table1.Column4
from Table1 INNER JOIN
     Table2
     ON Table1.Column1 = Table2.Column1 AND
        Table1.Column2 = Table2.Column2 AND
        Table1.Column3 = Table2.Column3
WHERE Table1.Column4 <> Table2.Column4;

Column1、Column2、Column3 を合わせて、2 つのテーブルの主キーを形成します。

Column4 に欠損値 (null) がある場合、対応するレコードは結果の出力に不一致として表示されません。

(これは、テキスト、数値、日付/時刻データ型など、他の列でも発生しています)

コメントはありますか?

4

4 に答える 4

4

INNER 結合ではなく、LEFT 結合が必要です。

from Table1 LEFT JOIN

あなたは言いたいかもしれません:

Select Table1.Column1, Table1.Column2, Table1.Column3, Table1.Column4
from Table1 LEFT JOIN
     Table2
     ON Table1.Column1 = Table2.Column1 AND
        Table1.Column2 = Table2.Column2 AND
        Table1.Column3 = Table2.Column3
WHERE Table1.Column4 & "" <> Table2.Column4 & "";

長さ 0 の文字列をフィールドに連結すると、値と null の比較が確実に表示されます。

于 2012-08-27T19:04:19.890 に答える
1

SQLでは、NULLは何にも等しくないだけでなく、何にも等しくありません。

NULL(を除くIS NULL)との比較はUNKNOWN値になるため、行は返されません。

例として(この場合はMySQL構文を使用していますが、Accessについても同じことが言えます)。

SELECT 1 FROM DUAL WHERE 0 = 0;
SELECT 2 FROM DUAL WHERE 0 <> 1;
SELECT 3 FROM DUAL WHERE NULL = NULL;
SELECT 4 FROM DUAL WHERE NULL <> 1;

クエリ1と2は明らかにそれぞれ1と2を返しますが、クエリ3と4は(それほど明白ではありませんが)何も返しません。

詳細については、このリンクのアクセス(「エラー5」までスクロール)を参照してください。

于 2012-08-27T19:15:13.787 に答える
0

MS SQLの場合:

WHERE isnull(Table1.Column4、'')<> isnull(Table2.Column4、'')

または、他のSQL実装の標準として、「isnull」の代わりに「coalesce」を使用します。

于 2012-08-27T19:58:50.820 に答える