我有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中的描述。
答案 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逻辑命令,最好添加括号以正确利用逻辑。