用另一个表中的值更新一个表。 PL SQL

时间:2018-10-19 04:10:34

标签: tsql plsql updates

我经常在JOIN和UPDATE下面使用TSQL将值从一个表带到另一个表。

UPDATE T1
SET T1.Mobile = T2.Mobile
FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID

然后我在PL SQL中发现,进行这种更新的语法是通过使用MERGE或nest语句。

这两种方法似乎都不如TSQL解决方案简单明了,这使我想知道PL SQL开发人员是否实际上执行了这种跨表更新,或者是否有其他开发原理使这种更新不必要。

我从PL SQL开发人员那里得到的一条评论是,他们宁愿创建像这样的视图

CREATE VIEW MyView AS
(
SELECT T1.Filed1, T1.Field2, T2.Mobile 
FROM Table1 T1 INNER JOIN Table2 T2 ON T1.ID = T2.ID
);

这似乎是一个可行的解决方案,因为联接不会将重复项引入Table1 / MyView中,也不会在上面放置dedup逻辑。 一个明显的好处是,我们可以继续刷新Table2.Mobile,而MyView将始终具有更新后的值。

我正在寻求有关编码原理的评论。 :)

2 个答案:

答案 0 :(得分:0)

您可以使用相关子查询进行更新:

UPDATE Table1 T1
SET T1.Mobile = (SELECT Mobile FROM Table2 T2 WHERE T1.ID = T2.ID);

答案 1 :(得分:0)

您应该使用此查询进行内部联接。 没有where子句,它只是一个左联接,它可以包含来自T2的空移动数据

UPDATE Table1 T1
SET T1.Mobile = (SELECT min(Mobile) FROM Table2 T2 WHERE T1.ID = T2.ID)
where T1.ID in (SELECT T2.ID FROM Table2 T2)
;
  • 借助max(Mobile),您可以避免在遇到 T1:T2与1:n关系。
  • 要加速语句,您应该在T1.ID和T2.ID上创建索引