我经常在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将始终具有更新后的值。
我正在寻求有关编码原理的评论。 :)
答案 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)
;