2017-07-25 23 views
1


如何比较2个表格与相同的行,但不同的数据?
的表是这样的:
1.表price_old:如何比较MS-SQL中的2个表?

|-----------------------| 
| 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  |  
+0

因此,行比较匹配基于'id'值?然后要报告的行是'price1'或'price2'(或两者)不同的那些行。而且我们不必考虑从任何表中丢失行? –

+0

是的,他们是基于价值'id'。而且,表格中没有行缺失,它们完全相同。 –

回答

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 
+0

为我工作,ty! –

+1

感谢您让我知道@KevinLiss高兴地帮助过! – WJS

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 
    ) 
+0

一个好方法! –

+1

在SQL Server中(我正在使用的系统)没有像'ROW()这样的函数' –

+0

这不可能!也许你错过了什么。 –