19857について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2019-1-22 22:18
yanaji  新米   投稿数: 4
・UPDATE (SELECT manager_id, hiredate FROM employees) SET manager_id = 1005 WHERE hiredate >= '08-04-01';
表名の代わりに副問合せを指定したUPDATE文です。更新する列、WHERE句の条件に指定した列ともに副問合せのSELECT句に指定されている列ですので、エラーにはならず、期待通りに更新されます。

という解説について。
updateの副問合せでmanager_idとhiredateが返って来るので、SETも二つの値の指定が必要だと思うのですが
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2019-1-23 13:02
quensan  長老   投稿数: 119
引用:
また、表名の代わりに副問合せを指定したUPDATE文にWHERE句を指定する場合も、副問合せのSELECT句に指定した列に関する条件しか指定できませんので注意しましょう。
と解説に書いてあるように、SETだけでなくWHERE句に指定する列も副問合せのSELECT句に指定する必要があるのですよ。
試しに副問合せでmanager_idだけ指定するとおこられます。

SQL> UPDATE (SELECT manager_id FROM employees) SET manager_id = 1005 WHERE hiredate >= '08-04-01';
UPDATE (SELECT manager_id FROM employees) SET manager_id = 1005 WHERE hiredate >= '08-04-01'
*
行1でエラーが発生しました。:
ORA-00904: "HIREDATE": 無効な識別子です。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.