使用连接更新表

时间:2013-11-26 01:45:17

标签: sql sql-server sql-server-2005

我有两张桌子ta,tb。 ta列 - cId,c1,c2。 c1和c2包含空值,需要填充数据。 tb列 - cId,c3,c4。 c1和c2的数据分别来自c3和c4。

所以,我试着先做一个简单的内连接。两个表分别别名为al_ta和al_tb。然后,我提出了更新声明 -

UPDATE ta SET 
  al_ta.c1 = al_tb.c3, 
  al_ta.c2 = al_tb.c4
FROM ta AS al_ta
INNER JOIN tb AS al_tb 
ON al_tb.cId = al_tb.cId

这不起作用,我收到错误 - 无法绑定多部分标识符al_ta.c1。我如何使这项工作?

示例表 -

ta

cId c1  c2
1   NULL    NULL
2   NULL    NULL
3   NULL    NULL

TB

cId c3  c4
1   11  111
2   22  222
3   33  333
4   44  444

2 个答案:

答案 0 :(得分:2)

引用列时,如果在JOIN中抽象了表名,则需要使用别名而不是基表名。猜测你的联接可能是什么样子,你可能想要这样写:

UPDATE ta SET 
  ta.c1 = tb.c3, 
  ta.c2 = tb.c4
FROM dbo.some_long_table_name_a AS ta
INNER JOIN dbo.some_long_table_name_b AS tb 
ON ta.cId = tb.cId
WHERE ta.c1 IS NULL OR ta.c2 IS NULL;

我不明白说的目的:

FROM ta AS al_ta 

为什么你会在这里使用一个比原始表名更难写的别名呢?

答案 1 :(得分:0)

请尝试

update ta set 
 ta.c1 = b.c3, 
  ta.c2 = b.c4
from ta a join tb b on a.cid = b.cid
相关问题