0

同様のデータを持つ2つのテーブルがあります。比較のために最も近い一致を見つけたい。これが私がやろうとしていたことです:

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 がなく、データベースにある多くのフィールドが欠落しています。また、データベースには外部キーと子データがいたるところにあります。だから私は削除/挿入したくありません。代わりに、値を比較して、可能な限り更新したいと考えています。そこで、2 つの一時テーブルを作成し、データベース レコードを 1 つにプルし、スプレッドシート レコードを別のテーブルにプルしました。今、私はこれらの 2 つのテーブルを操作してレコードを更新し、最後に更新が利用できない場所を削除/挿入したいと考えています。

4

1 に答える 1

0

MERGEステートメントを調べましたか? 構文は少しトリッキーですが、それはあなたが望むことをします。

半分まともな例でここに記事:

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

于 2013-09-20T15:56:00.037 に答える