同様のデータを持つ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 つのテーブルを操作してレコードを更新し、最後に更新が利用できない場所を削除/挿入したいと考えています。