比较两个sql服务器表
问题描述:
任何人都可以建议我如何比较sql server中的两个数据库表,并返回第二个表中不在第一个表中的行。两个表中的主键都不相同。例如,表格如下。比较两个sql服务器表
表1
ID Name DoB
1 John Doe 20/03/2012
2 Joe Bloggs 31/12/2011
表2
ID Name DoB
11 John Doe 20/03/2012
21 Joe Bloggs 31/12/2011
31 James Anderson 14/04/2010
SQL查询应该只比较名称和DOB两个表中,并返回 31詹姆斯 - 安德森14/04/2010
感谢。
答
很简单的,使用LEFT OUTER加入返回一切fr OM表2即使没有在表1匹配,则限制下降到只做行没有有一个匹配:
SELECT Table2.ID, Table2.Name, Table2.DoB
FROM Table2
LEFT OUTER JOIN Table1 ON Table2.Name = Table1.Name AND Table2.DoB = Table1.DoB
WHERE Table1.ID IS NULL
+0
非常感谢 – Vj87 2012-08-03 09:59:55
答
你想要一个LEFT OUTER JOIN。 http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join
即使连接表中没有匹配的记录,这种类型的JOIN将返回“左”表的所有记录(本例中FROM子句中的表)。
SELECT Table2.ID, Table2.Name, Table2.DoB
FROM Table2
LEFT OUTER JOIN Table1 ON Table1.Name = Table2.Name AND Table1.DoB = Table2.DoB
WHERE Table1.ID IS NULL
请注意,您可以将LEFT OUTER JOIN替换为LEFT JOIN。这是大多数DBMS使用的捷径。
感谢您指出。我会从现在开始继续。 – Vj87 2012-08-03 10:04:32