:SQL更新与我在用的Oracle 11g以下更新查询问题subsubquery
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_B中的每条记录都有多条记录。然而,来自客户的新需求:TABLE_A将获得2个新列,而TABLE_B将被删除。因此,子查询的第一个记录的表示将写入第一个新字段,第二个记录也会写入相同的记录。第一个记录是容易的,因为迈克C'S解决方案可与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 |
------------------------------------
什么是“where row_number = 2”的目的?你想要做什么? – tbone
它在编辑中。需要将TABLE_B中前两个记录的表示匹配TABLE_A中两个新字段中的字段。 – Cantillon
好的,所以一个数据透视表,将tableB中的2行变成tableA中的2列?可以考虑通过CTAS连接2个表格来重新创建tableA。什么是Oracle版本? – tbone