0

2つのテーブルがあり、共通の列に基づいて最初のテーブルの値で2番目のテーブルを更新する必要があります。

私は以下のステートメントを使用しました

UPDATE emp
  2      SET ename = ( SELECT dname
  3                    FROM dept
  4                    WHERE emp.deptno = dept.deptno)
  5      WHERE EXISTS
  6        ( SELECT dname
  7                    FROM dept
  8                    WHERE emp.deptno = dept.deptno);

しかし、エラーが発生しています

ORA-01427 - Single row subquery returns more than one row.

助けてくれませんか?

4

3 に答える 3

0

テーブルへのサブクエリdeptは、おそらく 1 つの行を返していません。の行ごとにから 1 行を取得するminormax操作を追加します。各設定値は明確でなければなりません。deptemp

UPDATE emp
    SET ename = ( SELECT min dname
                  FROM dept
                  WHERE emp.deptno = dept.deptno)
    WHERE EXISTS
      ( SELECT dname
                  FROM dept
                  WHERE emp.deptno = dept.deptno);

注意 1: デフォルトでは SCOTT スキーマdeptnoは主キーであるため、エラーは発生しません。Remark2: あなたの質問はserverfault.com
に置くべきではありませんか?

于 2013-01-11T07:28:22.827 に答える
0
SELECT dname
FROM dept
WHERE emp.deptno = dept.deptno

クエリは単一のレコードを返す必要があります。

確認する

SELECT count(*), dname
FROM dept
group by dname
having count(*) > 1
order by 1 desc

または使用

SELECT dname
FROM dept
WHERE emp.deptno = dept.deptno
and rownum = 1
于 2013-01-11T07:22:09.763 に答える
0

最初のサブクエリが 1 つの値 bcz のみを返すかどうかを確認する必要があります。このサブクエリが複数の行を返す場合、1 つのフィールド ename を行の 2 つの値で更新したいので、このエラーが発生していると思います。

于 2013-01-11T07:22:17.547 に答える