2012-06-01 26 views
1

我在发布此问题之前尝试搜索,但无法找到另一个示例。SQL Server 2008 - 更新表A使用与C连接的结果B

我很痛苦地意识到,SQL目前是我的致命弱点,我正在研究它,所以请耐心等待!

我悲哀的故事,涉及3个表:

表A:有柱(estId)我想更新

tableB的:包括建立详细信息,包括名称(estName)

表C:包含需要导入的建立数据,包括建立名称(estName)和关联的建立标识(estCode)

在伪语言中,我希望实现的是:

Update tableA 
Set estId = tableC.estCode 
Where tableC.estName = tableB.estName 

我已经试过这样:

UPDATE tableA 
SET estId = tableC.estCode 
FROM 
    tableC 
    JOIN tableB 
    ON tableC.estName = tableB.estName 

那失败。或者说,它更新了estId列,但每行都包含tableC的第一个值。

我可能失去了一些东西明显...

谁能帮助?

+1

您需要将TableA连接到'from'子句中的其他表。我没有看到上述信息的连接。所以,'更新TableA set estId = tableC.estCode from TableA内部连接TableB on ...内部连接TableC ...' –

+1

您需要一个条件来连接到tableA - 否则数据库引擎不知道如何更新列。 tableA中还有哪些与tableB或tableC中的列对应的列? – Dave

+1

开头的事情:您当前的加入/更新没有tableA上的任何条件。你如何期望tableB/tableC中的行与你想在tableA中更新的行匹配? – YavgenyP

回答

0

UPDATE t_alias SET t_alias.estId = tableC.estCode FROM 表A作为t_alias JOIN tableB的上 tableB.estID = tableA.estID JOIN表C ON tableC.estName = tableB.estName