2011-06-24 7 views
1

に参加しtable2.newData私は現在table2.oldDataから移入されたデータtable1.fieldToChangeを持っている...しかし、私はこれを更新しにそれを変更したいSQLの更新が

ここです私が試してみて、これを達成するために使用していますコード:

UPDATE table1 
SET table1.fieldToChange = 
    (SELECT table2.newData 
    FROM table2 
    WHERE table2.oldData = table1.newData 
) ; 

しかし、私は「ORA-01427」エラーが発生します。

両方table2.newDatatable2.oldDataは一意の識別子であり、唯一のデータベースに一度使用します。どんな助けでも大歓迎です!あなたが更新されているテーブルの上にエイリアスを持つことはできません

UPDATE table1 
SET fieldToChange = table2.newData 
FROM table2 
WHERE table2.oldData = fieldToChange 

注:

が、これはオラクルでは動作しますが、MS SQLでこれを行うことができれば

答えて

0

がわからない、ありがとうございました。

+0

セミコロンを追加おかげで、ちょうどこれを試してみましたが、メッセージ:( – Nick

+1

を「コマンドが正常に終了しない」を取得? – Benoit

1

ORA-01427は、サブクエリに複数の値を戻すことを示します。 DISTINCT句またはサブクエリの行を一意に識別するその他のメカニズムを含むようにクエリを変更します。

UPDATE table1 
SET table1.fieldToChange = 
    (SELECT DISTINCT table2.newData 
    FROM table2 
    WHERE table2.oldData = table1.newData 
) ; 
+0

あなたは主キーで作業している場合を除き、あなたも絶対に安全であることをTOP 1を追加する必要があります –

+0

多くの方に感謝しますが残念ながら、table1.fieldToChangeが何に設定されていても同じ結果を返すだけです – Nick

+0

あなたの質問、または少なくともあなたの擬似コードは間違っていますか?最初に期待通りの結果が得られることを確認してください(Update行をコメントアウトしてSETをSELECTにしてください)。 – billinkc

1

MERGE statementでそれを試してみてください。

MERGE INTO table1 tgt 
USING (SELECT newData,oldData 
     FROM table2 
     WHERE table2.oldData = table1.newData) src 
ON (src.oldData = tgt.newData) 
WHEN MATCHED THEN 
    UPDATE SET tgt.fieldToChange = src.newData; 
+0

ありがとうございますが、無効な識別子エラーが発生して、私はスカッシュに見えません。/ – Nick

+1

使用している実際のSQLを – mcha

+0

MERGE INTO "Employee"と書いておけば役に立ちます。 USING(SELECT "Location_Code"、 "Location_Add1" FROM "Location" WHERE "Location"。 "Location_Add1" = "Employee" "Location_Code")b ON(b。 "Location_Add1" = "Gp_Nearest_Station") UPDATE SETと一致したとき "Gp_Nearest_Station" = b。 "Location_Code"; – Nick

1

あなたは意味ないのですか?

UPDATE table1 
SET fieldToChange = 
    (SELECT table2.newData 
    FROM table2 
    WHERE table2.oldData = table1.fieldToChange  ---- and NOT table1.newData ? 
) ;