如何验证两个查询是否包含完全相同的数据

时间:2015-09-02 17:17:58

标签: sql sql-server

我有一个表维护一个“黄金标准”数据集,如果表格处理正确,另一个表应该匹配。

这两个表都有近1,000,000条数据记录。

例如。我有table(table1)有PrimaryKey1,ColumnA,ColumnB,ColumnC,ColumnD和E列。

我有另一个表(table2),包含ForeignKey1,ColumnF,ColumnG,ColumnH,ColumnI,ColumnJ。

我需要检查这两个表中的所有数据是否完全相同,除了几列。

我的意思是table1中的ColumnA必须与table2中的columnF完全相同,而table1中的ColumnC必须与table2中的ColumnI匹配FOR THE SAME RECORD(让我们调用这个primaryKey1)。表中的其他列无关紧要。

另外,如果数据集之间存在不匹配,我需要知道不匹配的位置。

5 个答案:

答案 0 :(得分:1)

我认为你最好的选择是SUBSTRACT()。从A中选择x,y,z从B中选择x,y,z。如果没有返回任何内容,那么你就可以了。

希望这有帮助!

答案 1 :(得分:0)

我使用的一个快速技巧就是比较行数。这至少会告诉你是否有问题(它不会告诉你问题在哪里)。

联合查询可以将两个查询连接在一起并显示组合结果。常用行被视为1行。因此,如果第一个查询正好返回100万行,则UNION查询(两个查询组合)应该返回正好100万行。如果不存在问题。

select ColumnA 'Col1'
     , ColumnC 'Col2'
  from Table1
UNION
select ColumnF 'Col1'
     , ColumnI 'Col2'
  from TableB

答案 2 :(得分:0)

这样的东西
select 
    *
from
    gold_copy a
    join my_copy b on a.primary_key = b.primary_key
and
    a.field1 <> b.field1
    or a.field_a <> b.field_f
    or a.field_c <> b.field_i
    or a.field_x <> b.field_y

答案 3 :(得分:0)

我认为以下内容可以帮助您获得无与伦比的记录。

从table1中选择*不存在(select * from table2);

因此,您可以在列中检查两个表中所需的列,而不是所有列,但我认为列名应该相同。

谢谢。

答案 4 :(得分:0)

您可以为此

使用对称差异
(select 'table1', col
from table1
UNION ALL
select 'table2', col
from table2)
EXCEPT
(select 'table1', col
from table1
INTERSECT
select 'table2', col
from table2)

此查询仅返回仅在一个表中的行,并说明在哪个表中找到它