簡體   English   中英

SQL Server比較兩個表

[英]SQL Server Comparing two tables

我創建了一個臨時表:

 CREATE table #Temp
(
    ACCOUNT varchar(20),
    SERV_ACCT varchar(20),
    INV_DATE datetime,
    CURR_Date datetime
)

並在其中插入值。

我有另一個表:AccountTable,它具有四列:ACCOUNT,SERV_ACCT,INV_DATE,CURR_Date

將值插入#Temp后,可以執行以下操作以找到所有匹配的結果:

SELECT * FROM #Temp
JOIN AccountTable 
ON #Temp.ACCOUNT = AccountTable.ACCOUNT
AND  #Temp.SERV_ACCT = AccountTable.SERV_ACCT
AND  #Temp.INV_DATE = AccountTable.INV_DATE
AND  #Temp.CURR_Date = AccountTable.CURR_Date

這樣只會返回匹配的結果嗎? 我還有其他比較方法嗎?

您的INNER JOIN僅返回匹配的記錄,您可以使用FULL JOINWHERE條件檢查不匹配的記錄:

SELECT * 
FROM #Temp a
FULL JOIN AccountTable b
   ON a.ACCOUNT = b.ACCOUNT
     AND  a.SERV_ACCT = b.SERV_ACCT
     AND  a.INV_DATE = b.INV_DATE
     AND  a.CURR_Date = b.CURR_Date
WHERE a.Account IS NULL
   OR b.Account IS NULL

您可以將其與CASE語句結合使用以獲取匹配的記錄明細:

SELECT CASE WHEN a.Account IS NULL THEN 'Record in B Only'
            WHEN b.Account IS NULL THEN 'Record in A Only'
            ELSE 'Record in Both'
       END
       ,COUNT(*) 'CT'     
FROM #Temp a
FULL JOIN AccountTable b
   ON a.ACCOUNT = b.ACCOUNT
     AND  a.SERV_ACCT = b.SERV_ACCT
     AND  a.INV_DATE = b.INV_DATE
     AND  a.CURR_Date = b.CURR_Date
GROUP BY CASE WHEN a.Account IS NULL THEN 'Record in B Only'
            WHEN b.Account IS NULL THEN 'Record in A Only'
            ELSE 'Record in Both'
       END
ORDER BY COUNT(*) DESC

注意:以上兩種方法都假定Account不能合法為NULL ,選擇一個不能為NULL字段,或使用多個不能全部合法為NULL字段。 IE瀏覽器:

WHERE COALESCE(a.ACCOUNT, a.SERV_ACCT,a.INV_DATE,a.CURR_Date) IS NULL

這樣只會返回匹配的結果嗎?

是。 這將返回匹配結果。

因此,例如:

AccountTable:

brian -- bacon -- 02/08/2013 -- 02-08-2013
chicken -- spam -- 01/08/2013 -- 01-08-2013

#Temp:

brian -- bacon -- 02/08/2013 -- 02-08-2013

您的查詢將返回brian-row

但是請考慮您的日期是否不同。 然后,僅基於ACCOUNT和SRV_ACC進行匹配可能會更合適,因為您仍然希望顯示這些行。 因此,真正取決於上下文的意義取決於您。


我還有其他比較方法嗎?

這取決於您要實現的目標。 正如Goat CO已經指出的那樣,您還可以顯示不匹配的行。 您還可以比較哪些數據較新,或者哪個表包含更多數據。 有兩種方法可以比較兩件事。 例如,通過比較蘋果和西紅柿。 有些可以比較大小,有些可以比較味道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM