2012-04-27 12 views
0

テーブルtestからnameカラムを更新し、両方のテーブルの別の2つのカラムが一致するtest2テーブルのカラムname2からアップデートしようとしています。PL/SQL Update文で複数の行が返される

私はエラー "単一行のクエリの複数の行を返す"を返します。

複数の行を返すにはどうすればよいですか? forループを使用しますか?もしそうなら、どうですか?

Update Test 
SET name = (Select name2 
      from test2 
      where name2.col2 = name.col) 
WHERE EXISTS 
    (SELECT name2 
    FROM test2 
    WHERE name2.col2 = name.col); 
+0

サブクエリで 'name2.col2'と' name.col'をチェックしますが、 'name'と' name2'があなたのカラム名のようですが、あなたのテーブル名は使われていませんか?あなたの例を修正しようとしてください... –

答えて

0

あなたがここでやりたいことは、テーブルtestとtest2を結合することです。

SELECT name, name2 
FROM test INNER JOIN test2 
     ON test.col = test2.col 

(そこにあなたがname2.col = name.colを書くところ上記のクエリのタイプミスが、私はと仮定しています):

A SELECT文は次のようになります。このselect文を実行して、 "name"を置き換える値が "name2"列にあることを確認します。

次のようにUPDATE文はなります。このUPDATE文で文の2つのテーブルのために登録しようとして機能

UPDATE test 
SET name = test2.name2 
FROM test2 
WHERE test2.col = test.col 

ザ・。

1

あなたの問題は、あなたが名前を設定するための値を取得するには、スカラー副問合せを使用していることであるが、実際には、あなたのスカラー副問合せは、多く値見つかっ:

Select name2 from test2 where name2.col2 = name.col; 

name2 
----- 
FRED 
JOHN 
MARY 

おそらくこれをあなたの質問が間違っているということです。上の例では、test2.nameを何に更新したいですか?

+0

助けてくれてありがとう私はちょうど正しい方向にプッシュのビットが必要です。 – user1332821

関連する問題