根据第一和第二表进行更新

时间:2019-07-16 07:38:24

标签: sql tsql sql-update

我有3张桌子。

第一个表– MainTable-tableA

具有项目名称和描述

A   Apple
B   Banana
C   Carrot

第二张表-表B 子表:

A.10
A.20
A.30
B.10
B.20
B.30

项目名称(A,B,C)是表Child的外键。

我必须根据

更新第三个表(表C)
A …Apple
B…Banana
C…Carrot 

这对于内部联接很好。

现在,当我对代码10、20和30进行更新时..参考A,B和C的10,20和30 它不起作用。

这是我写的查询,它对于更新A,B和C正常工作

UPDATE C
   SET c.[ProjectName] = a.[sysprojectname] 
   FROM TableC C
   inner join tableA a ON c.[CostOBJProject]=a.[workpackageid]
   Where c.[ProjectName] is null or c.[ProjectName]=''

所以问题是–我必须使用表A的外键基于表B的值更新表C。

如果我在tableC中具有值A和10,那么它应该更新tableC中的描述。

1 个答案:

答案 0 :(得分:0)

请检查此链接,这将为您提供帮助

https://dev.mysql.com/doc/refman/5.7/en/update.html

我认为您的语法有问题。 您可以在UPDATE查询中执行连接的表。

UPDATE TableC, tableA
   SET TableC.[ProjectName] = tableA.[sysprojectname] 
   Where   tableA.connectcolumn =  TableC.connectcolumn
   AND (TableC.[ProjectName] is null or TableC.[ProjectName]='' )

使用更新语法时必须严格,因此在这种情况下不允许LEFT JOIN。它等效于EQUI JOIN,这是一种古老的联接方式。

SET子句命令解释器仅操纵该列,即使两个列都被调用。 随着代码的复杂性,您添加了OR逻辑命令,最好添加括号以正确利用逻辑。