在查询Oracle时需要一些帮助。基本上我想把一个更新一些列的查询放在一起,用测试数据替换实际数据。要做到这一点,我们需要做一些事情,比如在两个表中更改项目代码,但引用必须匹配,所以例如我要做...
UPDATE table1 t1, table2 t2
SET t1.project_ref = concat('projectRef-',rownum),
t2.project_ref = t1.project_ref
WHERE t1.project_ref = t2.project_ref and t1.project_client = XYZ
这会将t1.project_ref和t2.project_ref更改为类似客户XYZ的'projectRef-1'。
有什么想法吗?
此致
KS
答案 0 :(得分:4)
通常,Oracle中可以对联接进行更新。
这是语法: 更新(选择T1。*从T1,T2在哪里......)设置...
它们需要T1和T2之间的连接条件,以及T2中连接列的唯一索引,以确保选择在T1中每行返回最多一列。 不幸的是,还有另一个限制,即只能更新其中一个表中的列(此处为T1)。
因此,您需要一个中间表,在其中将project_ref的变更集插入new-project_ref,然后使用此表分别更新T1和T2。
答案 1 :(得分:2)
我担心你将不得不建立一个翻译表。类似的东西:
project_test_data
-----------------
real_project_ref varchar2(30)
test_project_ref varchar2(30)
然后编写更新语句,将测试版本替换为相关表格中的实际版本。
请注意,如果您在这些列上定义了外键关系,则需要禁用它们,或者至少使它们可延迟和延迟。这是避免将有意义的数据用作主键的一个原因。
答案 2 :(得分:0)
http://www.club-oracle.com/threads/updating-two-tables-in-single-query.6026/
此链接有详细解答您的问题请参阅一次:)