問題
表1:
| KeyColumn | DataColumn1 | DataColumn2|
01 0.1 0.2
02 0.13 0.41
表2:
| anotherKey | DataColumn1 | DataColumn2|
A1 .15 1.2
A2 .25 23.1
表3:
|KeyColumn| anotherKey |
01 A1
02 A1
キー(A1またはA2)が与えられた場合、表1のDataColumn1列とDataColumn2列を、表2の対応する値で更新する必要があります。
したがって、上記のデータに示すように、table1ではx個の行を更新できます。 A1を更新する場合、01行と02行の両方を更新する必要があります
(したがって、table1の値は、キー01と02の両方で、datacolumn1の場合は0.15、datacolumn2の場合は1.2になります)
これまでに試したこと:
MERGE table1
USING (SELECT *
FROM table2
LEFT OUTER JOIN table3
on table2.anotherKey = table3.anotherKey
WHERE table2.anotherKey = 'A1') tmpTable
ON
table1.keyColumn = tmpTable.keyColumn
WHEN MATCHED THEN
UPDATE
SET table1.DataColumn1 = tmpTable.DataColumn1
,table1.DataColumn2 = tmpTable.DataColumn2;
質問:
そしてエラー:
メッセージ102、レベル15、状態1、行1 'a'付近の構文が正しくありません。メッセージ102、レベル15、状態1、行12「d」付近の構文が正しくありません。
あなたが持っているクエリはエラーを与えます
Msg 8156, Level 16, State 1, Line 59
The column 'AnotherKey' was specified multiple times for 'tmpTable'.
これは、using句で*
を使用しており、AnotherKey
がtable2
とtable3
の両方の一部であるためです。
必要な列を指定します。また、keycolumn
clauseでon
を使用しているため、外部結合を使用する必要はありません。
MERGE table1
USING (SELECT table3.keycolumn,
table2.DataColumn1,
table2.DataColumn2
FROM table2
INNER JOIN table3
ON table2.anotherKey = table3.anotherKey
WHERE table2.anotherKey = 'A1') tmpTable
ON
table1.keyColumn = tmpTable.keyColumn
WHEN MATCHED THEN
UPDATE
SET table1.DataColumn1 = tmpTable.DataColumn1
,table1.DataColumn2 = tmpTable.DataColumn2;
更新
実際のエラーを投稿することは常に役立ちます。
Msg 102, Level 15, State 1, Line 1 Incorrect syntax near 'a'. Msg 102, Level 15, State 1, Line 12 Incorrect syntax near 'd'.
SQL Server 2005を使用しているようです。Mergeは SQL Server 2008 から利用できます。
SQL Serverのバージョンは、select @@version
で確認できます。