在新表中查找新值

时间:2014-11-03 14:56:21

标签: sql-server

我有新表:

Customer   Date      Id
1          201401     9
1          201401     1
1          201402     2
2          201404     3
2          201404     4
3          201406     5
4          201408     6

表OLD:

Customer   Date      Id
1          201401     1
1          201402     2
2          201404     3
2          201404     4
3          201406     5
4          201408     6

表NEW包含表OLD中的所有值以及一些不在表OLD中的新值。

我需要找到两个表(OLD和NEW)中具有相同Key(列Customer)和相同Date(Date)的Customer以及这些表中的不同ID。

因此SELECT只应返回

1          201401     9

我尝试过简单的加入:

SELECT *
FROM NEW n 
LEFT JOIN OLD o ON n.ID = o.ID
WHERE n.Date = o.Date 
AND n.ID <> o.ID

但由于加入的条件,它显然是错误的。但是我不能在客户上加入它,那么我怎么能以其他方式呢?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用EXISTS / NOT EXISTS

SELECT n.*
FROM NEW n 
WHERE EXISTS(
   SELECT 1 FROM Old o
   WHERE n.Customer = o.Customer AND  n.Date = o.Date
   AND   n.ID <> o.ID
)
AND NOT EXISTS(
   SELECT 1 FROM Old o
   WHERE n.Customer = o.Customer AND  n.Date = o.Date
   AND   n.ID = o.ID
)

Demo