如何借助 Oracle 中的第三张表将数据从源表更新到目标表?
Posted
技术标签:
【中文标题】如何借助 Oracle 中的第三张表将数据从源表更新到目标表?【英文标题】:How to update data from source table to Destination table with the help of third table in Oracle? 【发布时间】:2016-01-05 14:04:28 【问题描述】:我正在尝试将数据从 table3(源表)更新到不存在直接关系的 table1(目标表)。我必须在另一个映射表 table2 的帮助下完成。让我放下表结构: enter image description here
我将逻辑以查询的形式放在这里。我知道语法可能是错误的。请提出建议并给出您的建议。谢谢
示例查询(仅用于理解逻辑):
UPDATE table1 destTab
SET (destTab.fname, destTab.lname) =
(
SELECT sourceTab.fname, sourceTab.lname
FROM table3 sourceTab
WHERE
sourceTab.KEY = table2.KEY AND
destTab.ID = table2.ID
);
我们可以在单个查询中实现此要求还是我需要编写脚本?请提出建议并给出您的建议。谢谢
【问题讨论】:
提供示例数据和预期输出可能会有所帮助。 请在上面的“在此处输入图像描述”超链接中找到表结构的示例快照。 【参考方案1】:您可以在oracle中使用临时表的概念,这是一种模块化且易于理解的方法。
create global temporary table TEMP1(
ID VARCHAR2(50), KEY VARCHAR2(50))
ON COMMIT DELETE ROWS;
create global temporary table TEMP2(
KEY VARCHAR2(50), FNAME VARCHAR2(100), LNAME VARCHAR2(100))
ON COMMIT DELETE ROWS;
create global temporary table TEMP3(
ID VARCHAR2(50), FNAME VARCHAR2(100), LNAME VARCHAR2(100))
ON COMMIT DELETE ROWS;
BEGIN
INSERT INTO TEMP1 (ID, KEY)
(select TABLE1.ID, TABLE2.KEY
from TABLE1, TABLE2
where TABLE1.ID = TABLE2.ID
INSERT INTO TEMP2(KEY, FINAME, LNAME)
(SELECT ID, FNAME,LNAME
FROM TABLE3
WHERE TABLE3.KEY IN (SELECT KEY FROM TEMP1));
INSERT INTO TEMP3(ID, FNAME, LNAME)
(SELECT TEMP1.ID, TEMP2.FNAME, T2.LNAME
FROM TEMP1, TEMP2
WHERE TEMP1.KEY = TEMP2.KEY);
UPDATE TABLE1
SET (TABLE1.FNAME, TABLE1.LNAME) = (SELECT FNAME, LNAME FROM TEMP3
WHERE TEMP3.ID = TABLE1.ID);
commit;
END
【讨论】:
【参考方案2】:Oracle 提供了这样的解决方案 =>
UPDATE
(SELECT table1.value as OLD, table2.CODE as NEW
FROM table1
INNER JOIN table2
ON table1.value = table2.DESC
) t
SET t.OLD = t.NEW
(这取决于 Oracle 是否认为内联视图可更新)。
所以你可以试试这个查询:
UPDATE
( select t1.fname_old
, t1.lname_old
, t3.fname_new
, t3.lname_new
from table1 t1
join table2 t2 on t1.id = t2.id
join table3 t3 on t2.key and t3.key
) T
SET T.fname_old = T.fname_new
, T.lname_old = T.lname_new
;
【讨论】:
非常感谢您的快速回复。一定会尝试!以上是关于如何借助 Oracle 中的第三张表将数据从源表更新到目标表?的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE中如何多表关联查询。如有A、B、C三张表,A表字段a和B表字段b以及C表字段c关联,写出查询语句