簡體   English   中英

SQL表數據比較

[英]SQL Table data compare

我需要比較兩個表行,並且還僅顯示具有不同數據的庫倫,即來自兩個表的數據都不匹配。假設Table1和Table2具有50列,並且只有錯覺記錄為5,那么該庫倫需要進入Select語句。

比較部分已通過聯合查詢完成,我的障礙是如何提出錯誤的行列名稱。

一種方法是將所有此類列名的列表串聯在一個字符串中,如下所示:

select
T1.id, case when t1.col1<> t2.col1 then 'Col1;' else '' end +
    case when t1.col2<> t2.col2 then 'Col2;' else '' end 
    -- similar case statementes for all th columns you want to be included 
    -- in the list
    as Mismatchedcolumns
from Table1 T1
Join Table2 T2 on T1.id = T2.id

在此處查看演示。

如果您正在查看所有不匹配列的列表,請參見以下示例

CREATE TABLE TableA
    ([Product] varchar(1), [Qty] int, [Price] int, [Comments] varchar(3))
;

INSERT INTO TableA
    ([Product], [Qty], [Price], [Comments])
VALUES
    ('A', 20, 500, 'xyz'),
    ('B', 50, 200, 'xyz'),
    ('C', 90, 100, 'abc'),
    ('D', 50, 500, 'xyz')
;

CREATE TABLE TableB
    ([Product] varchar(1), [Qty] int, [Price] int, [Comments] varchar(3))
;

INSERT INTO TableB
    ([Product], [Qty], [Price], [Comments])
VALUES

    ('B', 70, 200, 'cv'),
    ('C', 90, 200, 'wsd'),
    ('D', 40, 400, 'xyz'),
    ('E', 50, 500, 'xyz')
;



SELECT  b.Product,
        b.Qty,
        b.Price,
        Result = CASE WHEN a.product IS NULL THEN 'New'
                    ELSE 'Updated: ' + 
                        STUFF(  CASE WHEN a.Qty != b.Qty THEN ',Qty' ELSE '' END + 
                                CASE WHEN a.Price != b.Price THEN ',Price' ELSE '' END,
                            1, 1, '')
                END
FROM    TableB b    
        LEFT JOIN TableA a
            ON a.Product = b.Product
WHERE   a.Product IS NULL
OR      a.Qty != b.Qty
OR      a.Price != b.Price

union

SELECT 
a.Product,a.Qty,a.Price, 'NewA' as Result
FROM 
TABLEA a left join
TABLEB b on a.Product = b.Product
WHERE b.Product is null

SQL Server 2008中解決方案的修改版比較同一數據庫中的兩個表,並更改get列

http://sqlfiddle.com/#!3/d1b3f/3

暫無
暫無

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

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