Tar*_*rik 4 sql t-sql sql-server comparison
我想知道如何比较两个不同的数据库表记录.我的意思是我将比较两个可能具有不同列名但数据相同的数据库表.但其中一个可能有比另一个更多的记录,所以我想看看这两个表之间的区别.要做到这一点,如何编写SQL查询?仅供参考:这两个数据库位于同一个SQL Server实例下.
Table1
------+---------
|name |lastname|
------+---------
|John |rose |
------+---------
|Demy |Sanches |
------+---------
Table2
------+----------
|name2|lastname2|
------+----------
|John |rose |
------+----------
|Demy |Sanches |
------+----------
|Ruby |Core |
------+----------
Run Code Online (Sandbox Code Playgroud)
然后在比较表1和表2之后,它应该从Table2返回Ruby Core.
小智 18
Select * from Table1
Except
Select * from Table2
Run Code Online (Sandbox Code Playgroud)
它将显示table1和之间的所有不匹配记录table2
小智 18
迟到的答案但对此线程的其他读者可能有用
除了其他解决方案,我还可以推荐名为ApexSQL Data Diff的SQL比较工具.
我知道您更喜欢不基于软件的解决方案,但对于其他可能想要以更简单的方式执行此操作的访问者,我强烈建议您阅读本文:http://solutioncenter.apexsql.com/how-to -compare-SQL服务器数据库表与-不同-名称/
本文介绍了如何在ApexSQL Data Diff中使用对象映射功能,这在两个表共享相同名称但其列名不同的情况下特别有用.
要处理这种情况 - 需要手动映射每个列对,以便在比较SQL数据库表中的差异时包含存储在其中的数据.
如果从T1到T2执行外连接,则可以通过在T2值中查找空值来查找前者中不在后者中的行,类似地,T2到T1的外连接将为T2提供行.将两者结合在一起,你就得到了很多......类似于:
SELECT 'Table1' AS TableName, name, lastname FROM
Table1 OUTER JOIN Table2 ON Table1.name = Table2.name2
AND Table1.lastname = Table2.lastname
WHERE Table2.name2 IS NULL
UNION
SELECT 'Table2' AS TableName, name2 as name, lastname2 as lastname FROM
Table2 OUTER JOIN Table1 ON Table2.name2 = Table1.name
AND Table2.lastname2 = Table1.lastname
WHERE Table1.name IS NULL
Run Code Online (Sandbox Code Playgroud)
这是我的头脑 - 我有点生锈:)