如何在MS-SQL中比较2个表?

时间:2017-07-25 08:01:29

标签: sql sql-server


如何比较具有相同行但不同数据的2个表?
表格是这样的:
1.表price_old:

|-----------------------|
| id | price1 | price2  | 
|-----------------------|
| 1  |   12   |   12    |
|-----------------------|
| 2  |   12   |   55    |
------------------------|
| 3  |   12   |   40    |
-------------------------

表格是这样的:
2.表price_old:

|-----------------------|
| id | price1 | price2  | 
|-----------------------|
| 1  |   12   |   12    |
|-----------------------|
| 2  |   13   |   40    |
------------------------|
| 3  |   10   |   40    |
-------------------------

结果应如下所示:
3.表结果:

|----------------------------------------------------------|
| id  | price1_old | price1_new | price2_old | price2_new  | 
|----------------------------------------------------------|
| 2   |   12       |     13     |      55    |    40       |
|----------------------------------------------------------|
| 3   |   13       |     10     |      40    |    40       |     

2 个答案:

答案 0 :(得分:2)

尝试这一点,加入id并过滤出至少一个价格不同的事件:

SELECT 
old.id,
old.price1 as price1_old,
old.price2 as price2_old,
new.price1 as price1_new,
new.price2 as price2_new
FROM price_old as old
LEFT JOIN price_new as new on old.id=new.id
WHERE old.price1<>new.price1 
OR old.price2<>new.price2 

答案 1 :(得分:1)

这可能是一种方法:

SELECT  'TableName' AS `set`, r.*
FROM    robot r
WHERE   ROW(r.col1, r.col2, …) NOT IN
    (
    SELECT  *
    FROM    TableName2
    )
UNION ALL
SELECT  'TableName2' AS `set`, t.*
FROM    tbd_robot t
WHERE   ROW(t.col1, t.col2, …) NOT IN
    (
    SELECT  *
    FROM    TableName1
    )