【问题标题】:SQL Multi-table update syntaxSQL 多表更新语法
【发布时间】:2014-08-11 14:17:31
【问题描述】:

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

UPDATE tblWOSampleTest

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

SET tblWOSampleTest.FormulaID = tbltest.formulaID

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多