tsql - 用另一个表中的值更新一个表。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 将始终具有更新的值。
我正在寻求对编码原则的评论。:)
解决方案
您应该使用此查询进行内部连接。如果没有 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 上创建索引
推荐阅读
- c# - 插入后加载导航属性
- laravel - Laravel Eloquent HasManyThrough 关系
- android - 我应该在 android.app.Application 中使用哪个协程范围?
- javascript - 如何在 v-autocomplete(vuejs & vuetify) 上使第二个值可选
- gekko - GEKKO - 通用 - 自定义可重复使用的流程图对象 - 化学工艺流程建模
- amazon-web-services - 向 KMS 资源上的无服务器“KeyPolicy”添加语句
- php - session_status - 真正的用法
- asp.net-mvc - 如果视图不包含记录 ID,如何让用户更新记录?
- mql4 - 一次只有一个 EA 工作。只要有交易,其他的就不会开放
- python - 在 MacOS 中安装 REGEX 时编译错误