1
私は2つのテーブルを持っており、レコードをマージする必要があります。2つのテーブルをマージしてそれぞれ挿入/更新します
ソース:
ID seq name designation company
001 1 aaa Developer YYY
001 2 aaa lead yyy
002 1 mmm consultant bbb
003 1 ppp developer yyy
003 2 ppp lead yyy
003 3 ppp manager yyy
対象:
ID seq name designation company
001 1 aaa Developer YYY
001 2 aaa lead yyy
002 1 mmm consultant bbb
003 1 ppp developer yyy
003 2 ppp lead yyy
003 3 ppp manager yyy
私は/更新レコードを挿入するためにマージ書きたいと思います。私のキー列はIDとseqの両方であり、複合主キーです。 一般的に、私たちが取得する更新記録です。たとえば、ID 001には2つのレコードがあります。 ID 001がシーケンス3の別のレコードを取得した場合、このレコードはターゲットに挿入されます。
私のソースは今 ソースがある場合:
ID seq name designation company
001 1 aaa Developer YYY
001 2 aaa lead yyy
001 3 aaa manager yyy
002 1 mmm consultant bbb
003 1 ppp developer yyy
003 2 ppp lead yyy
003 3 ppp manager yyy
ターゲットを次のようになります。 対象:
ID seq name designation company
001 1 aaa Developer YYY
001 2 aaa manager yyy
001 3 aaa manager yyy
002 1 mmm consultant bbb
003 1 ppp developer yyy
003 2 ppp lead yyy
003 3 ppp manager yyy
私は以下のマージをしようとしていますし、それは私のために働いていません。
MERGE target t
using source s
on s.ID=t.ID and s.seq=t.seq
when not matched
then
Insert
(
ID,
seq,
name,
designation,
company
)
Values
(
s.ID,
s.seq,
s.name,
s.designation,
s.company
)
when matched
then
update
set
name=s.name,
designation=s.designation,
company=s.company
;
どこが間違っているのか教えていただけますか?
MERGE TABLE1 AS TARGET
USING TABLE2 AS SOURCE
ON (SOURCE.ID = TARGET.ID AND SOURCE.seq = TARGET.seq)
WHEN MATCHED THEN
UPDATE SET
name=SOURCE.name,
designation=SOURCE.designation,
company=SOURCE.company
WHEN NOT MATCHED BY TARGET THEN
INSERT(ID,seq,name,designation,company)
VALUES(SOURCE.ID,SOURCE.seq,SOURCE.name,SOURCE.designation,SOURCE.company)
--If You want to delete rows found in TARGET and not found in SOURCE add the following line
WHEN NOT MATCHED BY SOURCE THEN
DELETE
: 任意のヘルプは、あなただけの次のクエリを試してみてください
NOT MATCHED BY TARGET
を指定する必要が