多対多リレーションシップのジャンクションテーブルに値を追加しようとしています。別の(一意の)フィールドを持つ複数のテーブルのプライマリIDを参照
テーブル(すべてのIDは整数である)これらのように見える:
表
+------+----------+
| id_A | ext_id_A |
+------+----------+
| 1 | 100 |
| 2 | 101 |
| 3 | 102 |
+------+----------+
表Bが概念的に類似している
+------+----------+
| id_B | ext_id_B |
+------+----------+
| 1 | 200 |
| 2 | 201 |
| 3 | 202 |
+------+----------+
表PKがID_A及びID_Bであります、私の接合テーブルの列はそれらの列にFKですが、私は値を挿入する必要があります外部ID(ext_id_A、ext_id_B)。
外部IDは一意の列なので、テーブルID自体が1:1であるため、ext_idを持つことで正確な行を検索してIDを取得して接合テーブルに挿入する必要があります。
これは私がこれまで行ってきたが、最適化されたSQL文のように見えないものの例である:
-- Example table I receive with test values
declare @temp as table (
ext_id_a int not null,
ext_id_b int not null
);
insert into @temp values (100, 200), (101, 200), (101, 201);
--Insertion - code from my sp
declare @final as table (
id_a int not null,
id_b int not null
);
insert into @final
select a.id_a, b.id_b
from @temp as t
inner join table_a a on a.ext_id_a = t.ext_id_a
inner join table_b b on b.ext_id_b = t.ext_id_b
merge into junction_table as jt
using @final as f
on f.id_a = jt.id_a and f.id_b = tj.id_b
when not matched by target then
insert (id_a, id_b) values (id_a, id_b);
私のストアドプロシージャは、Aのデータを受信するので、私はMERGE文を考えていましたTable Value Parametersパラメータを使用して、既存の参照をチェックする必要があります。
これらの値の挿入を改善するために何かできますか?
彼らはええ、私は知っている..私はこれらのテーブルを作成していないが、私は自分の道を見つけなければならない学校 – IsuruKusumal
で正規化についてお教え理由ですとにかく外に – Andrea
あなたのアプローチの問題は何ですか? –