首页 > 解决方案 > 用另一个表中的值更新一个表。PL SQL

问题描述

我经常使用下面的 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 或嵌套语句。

无论哪种方式似乎都不像 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,或者在上面放置重复数据删除逻辑。这样做的一个明显好处是我们可以继续刷新 Table2.Mobile,而 MyView 将始终具有更新的值。

我正在寻求对编码原则的评论。:)

标签: tsqlplsqlupdates

解决方案


您应该使用此查询进行内部连接。如果没有 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 上创建索引

推荐阅读