0

我有两个具有相似数据的表。想要找到最接近的匹配进行比较。这是我想做的事情:

select a.field1 as a1, b.field1 as b1, a.field2 as a2, b.field2 as b2
from foo a
left join (
   select top 1 tmp.field1, tmp.field2
   from foo2 tmp
   -- The closest match will match the most fields. Add up these.
   order by case when tmp.field1 = a.field1 then 1 else 0 end
          + case when tmp.field2 = a.field2 then 1 else 0 end
          desc) b on 1 = 1

不过,我无法在联接中引用主选择表。

也许我做错了。实际目标是给我一个数据电子表格并告诉我更新数据库。电子表格没有 PK 并且缺少数据库具有的许多字段。此外,数据库中到处都是外键和子数据。所以我不想删除/插入。相反,我想比较值并尽可能更新。所以我创建了两个临时表,并将数据库记录拉到一个中,将电子表格记录拉到另一个中。现在我想使用这两个表来更新记录,最后删除/插入没有可用更新的地方。

4

1 回答 1

0

您是否查看过 MERGE 语句?它做你想做的事,虽然语法有点棘手。

这里的文章有一半体面的例子:

http://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx

于 2013-09-20T15:56:00.037 回答