1

在查询 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

4

3 回答 3

4

通常在 Oracle 中可以对连接进行更新。

语法如下: update (select T1.* from T1, T2 where .. ) set ...

它们需要 T1 和 T2 之间的连接条件,以及 T2 中连接列的唯一索引,以确保选择在 T1 中每行最多返回一列。不幸的是,对您来说还有另一个限制,即只能更新其中一个表中的列(此处为 T1)。

因此,您需要一个中间表,将 project_ref 的变更集插入到 new-project_ref 中,然后使用该表分别更新 T1 和 T2。

于 2013-05-13T14:35:28.440 回答
2

恐怕你将不得不建立一个翻译表。就像是:

project_test_data
-----------------
real_project_ref varchar2(30)
test_project_ref varchar2(30)

然后编写更新语句,用测试版本替换相关表中的真实版本。

请注意,如果您在这些列上定义了外键关系,则需要禁用它们,或者至少使它们可延迟和延迟。这是避免使用有意义的数据作为主键的原因之一。

于 2013-05-13T13:08:57.540 回答
0

http://www.club-oracle.com/threads/updating-two-tables-in-single-query.6026/

此链接为您的问题提供了详细答案,请参阅一次 :)

于 2015-12-03T07:02:33.697 回答