除了有条件的表

use*_*970 1 sql sql-server

我们有两个表,id是主键

Old
{
 id
 name
 school
 ...
 version
}

New
{
 id
 name
 school
 ...
 version
}
Run Code Online (Sandbox Code Playgroud)

我想在两个表中找到相同的ID具有相同的键,但不同的其他列并忽略该版本.

Select * From [New] n Inner Join On [Old] o On n.id = o.id
Where n.name != o.name OR n.school!=o.school ....(Do all the columns without version)
Run Code Online (Sandbox Code Playgroud)

这是有效的,但实际上有很多列,我能用Except做吗?

SELECT * FROM [New] WHERE id IN (SELECT id FROM [New] EXCEPT (SELECT id FROM [Old]))
Run Code Online (Sandbox Code Playgroud)

这是除了版本,但这个没有考虑我们需要忽略版本列.

Gor*_*off 6

以下是解决方案的框架:

  select <columnlist>
  from new
  where id in (select id from old)
  except 
  select <columnlist>
  from old
Run Code Online (Sandbox Code Playgroud)

要获得<columnlist>,您可以手动输入.或者,您可以从中查询information_schema.columns.或者,您可以进入SQL Server Management工作室并执行以下操作:

  • 在对象资源管理器中打开数据库
  • 打开"表"
  • 打开感兴趣的表格(New)
  • 单击"列"(无需打开)并将其拖到查询窗口中

出现所有列.然后删除version你不想要的.