0

2つのテーブルAとB(同じ構造)で一致しない列のみを出力できるクエリを作成する必要があります

たとえば、テーブルAとBの両方に、同じ3つの主キーを持つ10の列があります。(これを行う理由は、テーブルAまたはBのいずれかでデータ入力エラーを見つけるためです)

たとえば、テーブルAの値は次のとおりです。ABC1 2 3 4 5 6 7(これは1行、ABCは主キーの値です)テーブルBの値はABC 1 2 3 4 5 6 8(これは1行、ABCです)主キーの値です)

ご覧のとおり、10番目の列の値は異なります(表Aの7、表Bの8)。クエリの結果は、表Bの値とともに、列1、2、3、および10になります。

4

2 に答える 2

0

実際には、異なる行を返すのは非常に簡単です。

select t1.A, t1.B, t1.C
from table1 t1
inner join table2 t2 on t1.A = t2.A and t1.B = t2.B and t1.C = t2.C
where t1.C1 != t2.C1 or t1.C2 != t2.C2 -- and so on for the remaining columns

これにより、異なる行の主キーが返されます。異なる列に実際に名前を付ける必要がある場合は、各行に同じ数の列を返す必要があるため、はるかに複雑になります。動的な数の列を持つことはできません。

于 2012-08-15T19:25:54.450 に答える
0

次のようなユニオン クエリを作成できます。

    SELECT Table2.Key1、Table2.Key2、Table2.Key3、CASE WHEN Table1.Value1 <> Table2.Value1 THEN 'Value1' END AS DifferingFields
    FROM Table2 LEFT JOIN Table1 ON Table2.Key1 = Table1.Key1 AND Table2.Key2 = Table1.Key2 AND Table2.Key3 = Table1.Key3
    WHERE テーブル 1.値 1 <> テーブル 2.値 1
    ユニオンオール
    SELECT Table2.Key1, Table2.Key2, Table2.Key3, CASE WHEN Table1.Value2 <> Table2.Value2 THEN 'Value2' END
    FROM Table2 LEFT JOIN Table1 ON Table2.Key1 = Table1.Key1 AND Table2.Key2 = Table1.Key2 AND Table2.Key3 = Table1.Key3
    WHERE テーブル 1.値 2 <> テーブル 2.値 2
    ユニオンオール
    SELECT Table2.Key1, Table2.Key2, Table2.Key3, CASE WHEN Table1.Value3 <> Table2.Value3 THEN 'Value3' END
    FROM Table2 LEFT JOIN Table1 ON Table2.Key1 = Table1.Key1 AND Table2.Key2 = Table1.Key2 AND Table2.Key3 = Table1.Key3
    WHERE テーブル 1.値 3 <> テーブル 2.値 3
    [...残りの値フィールドのステートメントを追加します...]

これは、異なる値を含むフィールドの名前で、3 つのキー フィールドの値を返します。

Microsoft Access の場合は、次を使用します。

    SELECT Table2.Key1, Table2.Key2, Table2.Key3, IIF(Table1.Value1 <> Table2.Value1,"Value1","") AS DifferingFields
    FROM Table2 LEFT JOIN Table1 ON Table2.Key1 = Table1.Key1 AND Table2.Key2 = Table1.Key2 AND Table2.Key3 = Table1.Key3
    WHERE テーブル 1.値 1 <> テーブル 2.値 1
    ユニオンオール
    SELECT Table2.Key1, Table2.Key2, Table2.Key3, IIF(Table1.Value2 <> Table2.Value2, "Value2","")
    FROM Table2 LEFT JOIN Table1 ON Table2.Key1 = Table1.Key1 AND Table2.Key2 = Table1.Key2 AND Table2.Key3 = Table1.Key3
    WHERE テーブル 1.値 2 <> テーブル 2.値 2
    ユニオンオール
    SELECT Table2.Key1, Table2.Key2, Table2.Key3, IIF(Table1.Value3 <> Table2.Value3, "Value3","")
    FROM Table2 LEFT JOIN Table1 ON Table2.Key1 = Table1.Key1 AND Table2.Key2 = Table1.Key2 AND Table2.Key3 = Table1.Key3
    WHERE テーブル 1.値 3 <> テーブル 2.値 3

次のデータを検討する場合:

表1:
Key1 Key2 Key3 Value1 Value2 Value3
1 2 3 4 5 6
1 2 4 4 5 8
1 2 5 4 5 10
1 2 6 4 6 10

表 2 :
Key1 Key2 Key3 Value1 Value2 Value3
1 2 3 4 5 7
1 2 4 4 5 9
1 2 5 4 5 11
1 2 6 4 5 11

次のような結果が得られます:
Key1 Key2 Key3 DifferingFields
1 2 6 Value2
1 2 3 Value3
1 2 4 Value3
1 2 5 Value3
1 2 6 Value3

于 2012-08-15T19:50:41.750 に答える