我有一个关系数据库,我想比较两个条目的数据差异。每个条目可能只是略有不同,但两个条目之间可能有大约100,000行要比较。
我将所有要比较的数据从两个数据库条目放入两个单独的临时表中,这些表排除了所有设置为唯一值的主键和外键(因此,它们总是不同的... 。并返回结果)。
我现在的做法是:
Select PrimaryStream, SecondaryStream, FirstFrame
From #tempTable1
UNION
Select PrimaryStream, SecondaryStream, FirstFrame
From #tempTable2
EXCEPT
Select PrimaryStream, SecondaryStream, FirstFrame
From #tempTable1
INTERSECT
Select PrimaryStream, SecondaryStream, FirstFrame
From #tempTable2
我得到了我想要的差异的结果,但我也想在这些结果中添加“PrimaryStreamName”,这是#tempTable1和#tempTable2,但是我不能用它们进行比较,因为它们总会与众不同。
#tempTable1中的每个PrimaryStreamName都相同,#tempTable2中的每个PrimaryStreamName都相同,但#tempTable1.PrimaryStreamName!=#tempTable2.PrimaryStreamName。
所以,我的目标是将PrimaryStreamName添加到结果中。
感谢您的帮助!
答案 0 :(得分:1)
请检查效果,但是以下查询应该给出预期结果:
Select PrimaryStream, SecondaryStream, FirstFrame, '1' PrimaryStreamName
From #tempTable1
UNION ALL
Select PrimaryStream, SecondaryStream, FirstFrame, '2' PrimaryStreamName
From #tempTable2
EXCEPT
(
(
Select PrimaryStream, SecondaryStream, FirstFrame, '1' PrimaryStreamName
From #tempTable1
INTERSECT
Select PrimaryStream, SecondaryStream, FirstFrame, '1' PrimaryStreamName
From #tempTable2
)
UNION ALL
(
Select PrimaryStream, SecondaryStream, FirstFrame, '2' PrimaryStreamName
From #tempTable1
INTERSECT
Select PrimaryStream, SecondaryStream, FirstFrame, '2' PrimaryStreamName
From #tempTable2
)
)
注意,有一个技巧:我执行INTERSECT
两次(我使用UNION ALL
,因为它比UNION
更快),因此查询在某些操作期间对更多行进行操作