Oracle11gの次の更新クエリで問題が発生しました。
update TABLE_A a set COL1 =
(SELECT b.COL2 FROM
(SELECT ROWNUM AS ROW_NUMBER, b.COL2 from TABLE_B b where COL3 = a.COL4)
WHERE ROW_NUMBER = 2
)
ORA-00904:"A"。"COL4":無効なID。
したがって、a.COL4はサブサブクエリでは認識されませんが、これを解決する方法がわかりません。
/編集。私は何をしようとしていますか?
TABLE_Aのすべてのレコードについて、TABLE_Bには複数のレコードがあります。ただし、お客様からの新しい要件:TABLE_Aは代わりに2つの新しい列を取得しますが、TABLE_Bは削除されます。したがって、サブクエリの最初のレコードの表現は最初の新しいフィールドに書き込まれ、2番目のフィールドにも同じように書き込まれます。MikeCのソリューションはROW_NUMBER=1で使用できるため、最初のレコードは簡単です。
行の例:
TABLE_A
| col0 | col1 | col2 | col3 | col4 |
------------------------------------
| | |dummy2|dummy3| 1 |
------------------------------------
| | |dummy4|dummy5| 2 |
------------------------------------
TABLE_B
| col1 | col2 | col3 |
----------------------
| d |name1 | 1 |
----------------------
| d |name2 | 1 |
----------------------
| d |name3 | 1 |
----------------------
| d |name4 | 2 |
----------------------
TABLE_A after update
| col0 | col1 | col2 | col3 | col4 |
------------------------------------
| name1| name2|dummy2|dummy3| 1 |
------------------------------------
| name4| |dummy4|dummy5| 2 |
------------------------------------