0

テーブル test から名前列を更新し、両方のテーブルの別の 2 つの列が一致する必要がある test2 テーブルの列 name2 から更新しようとしています。

「単一行クエリは複数行を返します」というエラーが表示されます。

複数の行を返すにはどうすればよいですか? 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);
4

2 に答える 2

1

あなたの問題は、スカラーサブクエリを使用して名前を設定する値を取得していることですが、実際にはスカラーサブクエリは多くの値を見つけます:

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

name2
-----
FRED
JOHN
MARY

これはおそらく、クエリが間違っていることを意味します。上記の例では、test2.name を何に更新しますか?

于 2012-04-27T09:34:13.090 に答える
0

ここでやりたいことは、テーブル test と test2 を JOIN することです。

SELECT ステートメントは次のようになります。

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

(上記のクエリで、name2.col = name.col と書いているところにタイプミスがあると思います)。この select ステートメントを実行して、"name" を置き換える値が "name2" 列にあることを確認します。

UPDATE ステートメントは次のようになります。

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

この UPDATE ステートメントの WHERE ステートメントは、2 つのテーブルの JOIN として機能します。

于 2012-04-29T18:53:18.550 に答える