19857について
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
19857について
msg# 1
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も二つの値の指定が必要だと思うのですが
表名の代わりに副問合せを指定したUPDATE文です。更新する列、WHERE句の条件に指定した列ともに副問合せのSELECT句に指定されている列ですので、エラーにはならず、期待通りに更新されます。
という解説について。
updateの副問合せでmanager_idとhiredateが返って来るので、SETも二つの値の指定が必要だと思うのですが
Re: 19857について
msg# 1.1
quensan
投稿数: 119
引用:と解説に書いてあるように、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": 無効な識別子です。
また、表名の代わりに副問合せを指定したUPDATE文に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": 無効な識別子です。