0

我需要构建一个查询,我只能输出两个表 A 和 B 中不匹配的列(相同的结构)

例如表 A 和 B 都有 10 列具有相同的 3 个主键。(这样做的原因是在表 A 或 B 中查找数据输入错误)

例如表 A 的值:ABC 1 2 3 4 5 6 7(这是一行,ABC 是主键的值)表 B 的值是 ABC 1 2 3 4 5 6 8(这是一行,ABC是主键的值)

如您所见,第 10 列具有不同的值(表 A 中的 7,表 B 中的 8)。查询的结果应该是 1、2、3 和 10 列,以及表 B 中的值。

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
    在哪里 Table1.Value1 <> Table2.Value1
    联合所有
    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
    在哪里 Table1.Value2 <> Table2.Value2
    联合所有
    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
    在哪里 Table1.Value3 <> Table2.Value3
    [...为剩余的值字段添加语句...]

这将返回 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
    在哪里 Table1.Value1 <> Table2.Value1
    联合所有
    选择 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
    在哪里 Table1.Value2 <> Table2.Value2
    联合所有
    选择 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
    在哪里 Table1.Value3 <> Table2.Value3

如果考虑以下数据:

表 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:
键1 键 2 键 3 值 1 值 2 值
3 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 回答