SQL多表更新语法

SQL多表更新语法,sql,sql-server,inner-join,database-schema,Sql,Sql Server,Inner Join,Database Schema,我的目标是将tblWosampleTest的formulaId列设置为等于tbltest的formulaId列的值,其中tblWosampleTest和tbltest具有相同的testid。TblTest是一种术语表,包含每个testid的信息。每个记录都有一个唯一的testid和一个formulaid列,其中包含该特定testid的formulaid。我给这些formulaid赋值,但意识到它们没有出现在tblwosampletest中,所以我正在编写一个脚本,将formulaid更改转换到t

我的目标是将tblWosampleTest的formulaId列设置为等于tbltest的formulaId列的值,其中tblWosampleTest和tbltest具有相同的testid。TblTest是一种术语表,包含每个testid的信息。每个记录都有一个唯一的testid和一个formulaid列,其中包含该特定testid的formulaid。我给这些formulaid赋值,但意识到它们没有出现在tblwosampletest中,所以我正在编写一个脚本,将formulaid更改转换到tblwosampletest表中。tblWosampletest是一个包含所有已完成工单的表。每个记录通过其WOID、sampleID和testid列的组合是唯一的。testid列指示对工单进行了哪些测试。还有一个formulaid列。此formulaid列必须更新,因为tblWosampletest是子表单表的记录源,需要正确显示该特定工单的formulaid。这是我想出的代码。我不是很擅长SQL,所以我希望有人告诉我我的逻辑是否正确

UPDATE tblWOSampleTest

JOIN tblTest t1
ON tblWOSampleTest.TestID=t1.TestID 
WHERE tblWOSampleTest.TestID=t1.TestID 

SET tblWOSampleTest.FormulaID = tbltest.formulaID
这是否有意义,是否实现了我的目标?这里有两张表格部分的图片供参考


多表更新的语法可能有点奇怪,我发现这是最容易遵循的:

UPDATE 
    t
SET
    t.FormulaID = t1.formulaID
FROM
   tblWOSampleTest t
   INNER JOIN tblTest t1 ON t1.TestID = t.TestID;

您的查询基本正确,但有语法错误。where子句应该保留在查询的末尾,尽管在您的示例中并不真正需要where子句,因为您已经在上使用了
,以便在表之间建立正确的链接。还可以使用列名称前面的表别名

UPDATE tblWOSampleTest t
INNER JOIN tblTest t1
ON t.TestID = t1.TestID 
SET t.FormulaID = t1.formulaID