2017-06-06 61 views
0

我有三个表:a,b,c。表b是a和c的映射表。我正在尝试更新表中的一列=表c列。使用映射表更新多个连接的表列

在实现更新,我收到一个错误:

[S0001][4104] The multi-part identifier could not be bound

UPDATE table_a 
SET table_a.Sector = table_c.Sector 
FROM table_a 
INNER JOIN table_b 
    ON table_a.business_ID = cast(table_b.business_id as BIGINT) 
INNER JOIN table_c 
    ON table_b.ACARA_SML_ID = table_c.ACARA_SML_ID 
WHERE a.State = 'ABC'; 

我感谢所有帮助。

回答

1

使用UPDATE从SELECT子句直接声明:

UPDATE table_a SET table_a.Sector = C.Sector 
FROM table_c C 
WHERE EXISTS 
(SELECT 1 FROM table_b B B.ACARA_SML_ID = C.ACARA_SML_ID AND 
       table_a.business_ID = CAST(B.business_id AS BIGINT) 
) AND A.[STATE] = 'ABC' 
+0

这很棒,完美运作。谢谢。 – matoneski

0

在您的WHERE子句中,您使用的是a.State,此处没有为任何表设置a作为表别名。

你可以试试这个查询使用正确的表的别名:

UPDATE A 
SET Sector = C.Sector 
FROM table_a A 
INNER JOIN table_b B ON A.business_ID = CAST(B.business_id AS BIGINT) 
INNER JOIN table_c C ON B.ACARA_SML_ID = C.ACARA_SML_ID 
WHERE A.[STATE] = 'ABC'; 
+0

感谢您的答复。在实现原始脚本时,我使用别名,但仍收到相同的错误。 – matoneski

+0

你可以将'set'语句更改为'SET Sector = C.Sector'并尝试? – Arulkumar

+0

您可以请重新检查您在查询中使用的表和列,我相信查询是正确的,但所引用的列是不正确的 – Azar