繁体   English   中英

比较两个表并添加一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM