首页 > 解决方案 > 当它们没有共同点时,如何从多个其他表中更新表 1?

问题描述

我有一个主表和 3 个其他表。这些表中的每一个都只有一行。我想用其他表中的相应列更新 TableMain 的列。而且这些表没有我可以加入的任何列。

create table TableMain(a1 int, a2 int, b1 int, b2 int, c1 int, c2 int)
create table TableA(a1 int, a2 int)
create table TableB(b1 int, b2 int)
create table TableC(c1 int, c2 int)

我有以下内容,它有效,但看起来很糟糕:

update TableMain
set a1 = (select a1 from TableA),
    a2 = (select a2 from TableA),
    b1 = (select b1 from TableB),
    b2 = (select b2 from TableB),
    c1 = (select c1 from TableC),
    c2 = (select c2 from TableC)

我已经尝试了下面的代码,但我得到了 NULL,所以这种方法不起作用:

update TableMain
set a1 = ta.a1, a2 = ta.a2, 
    b1 = tb.b1, b2 = tb.b2, 
    c1 = tc.c1, c2 = tc.c2, 
from TableA ta, TableB tb, TableC tc

有没有更优雅的方式来更新这些列?

PS 我问了一个类似的问题,但它解决了从单个表进行更新的问题。

标签: sqlsql-serversql-server-2017

解决方案


考虑:

UPDATE tm
SET tm.a1 = ta.a1,
    tm.a2 = ta.a2, 
    tm.b1 = tb.b1, 
    tm.b2 = tb.b2, 
    tm.c1 = tc.c1, 
    tm.c2 = tc.c2
FROM TableMain tm
CROSS JOIN TableA ta
CROSS JOIN TableB tb
CROSS JOIN TableC tc

推荐阅读