我有一个表维护一个“黄金标准”数据集,如果表格处理正确,另一个表应该匹配。
这两个表都有近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)。表中的其他列无关紧要。
另外,如果数据集之间存在不匹配,我需要知道不匹配的位置。
答案 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)
此查询仅返回仅在一个表中的行,并说明在哪个表中找到它