簡體   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