いくつかの条件が満たされたtable_A
fromに値を挿入したい。table_B
これが私がやりたいことですが、うまくいきません:
insert into table_A(ID, value1, value2)
select ID, value1, value2
from table_B
where table_B.ID <> table_A.ID
このエラーが発生しています:
マルチパート識別子「table_A.ID」をバインドできませんでした
ありがとう
いくつかの条件が満たされたtable_A
fromに値を挿入したい。table_B
これが私がやりたいことですが、うまくいきません:
insert into table_A(ID, value1, value2)
select ID, value1, value2
from table_B
where table_B.ID <> table_A.ID
このエラーが発生しています:
マルチパート識別子「table_A.ID」をバインドできませんでした
ありがとう
そのようには機能しません。INSERT ステートメントでテーブルを結合していません。使用する
insert into table_A(ID, value1, value2)
select ID, value1, value2
from table_B
where ID not in (select ID from table_A)
通常、右結合の方が高速です
insert into table_A (ID, value1, value2)
select b.*
from table_b b
right join table_a a
on a.ID = b.ID
where a.ID is null
これは一般的な問題であるため、MERGEステートメントはSQL2003標準で導入されました。特定の条件に応じて、既存の行を更新したり、新しい行を挿入したり、他の行を削除したりできます。
merge into table_a a
using table_B b
on (a.ID=b.ID)
when not matched then
insert (ID, value1, value2)
values (b.ID, b.value1, b.value2)
(未テスト)