[英]Compare two tables and add a column
我有一个关系数据库,我想比较两个条目中数据的差异。 每个条目可能仅略有不同,但是在两个条目之间可能有大约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添加到结果中。
谢谢你的帮助!
请检查性能,但以下查询应给出预期结果:
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
更快),因此在某些操作中查询将对更多的行进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.