SQL多表更新语法

时间:2014-08-11 14:17:32

标签: sql sql-server inner-join database-schema

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

UPDATE tblWOSampleTest

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

SET tblWOSampleTest.FormulaID = tbltest.formulaID

这是否有意义并实现我想要做的事情?以下是两张部分表格的图片供参考。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:2)

多表UPDATE的语法可能有点奇怪,我发现这是最容易理解的:

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

答案 1 :(得分:1)

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

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