带有内部联接的 SQL 更新查询语法
Posted
技术标签:
【中文标题】带有内部联接的 SQL 更新查询语法【英文标题】:SQL update query syntax with inner join 【发布时间】:2011-04-21 11:55:44 【问题描述】:谁能在这个查询中找到我的错误?我正在使用 SQL Server 2000,我想将 CostEntry 表中的所有条目更新为 ActiveCostDetails 表中的相应值。 where 子句确实适用于 select 语句。
UPDATE CostEntry CE
INNER JOIN ActiveCostDetails As AD ON CostEntry.lUniqueID = ActiveCostDetails.UniqueID
SET CostEntry.sJobNumber = ActiveCostDetails.JobNumber
WHERE CostEntry.SEmployeeCode = '002'
AND SubString(CostCentre, 1, 1) = sDepartmentCode
AND substring(CostCentre, 3, 1) = sCategoryCode
AND substring(CostCentre, 5, 2) = sOperationCode
【问题讨论】:
@OMG Ponies- 感谢您的关注,但此查询与原始查询具有相同的效果(由于语法错误而无法正常工作)。我相信这是因为 SQL Server 在查询中忽略了空格和回车。 我刚刚重新格式化了您发布的内容——更易于阅读,更易于帮助 好的小马,我明白了。我正在研究一个在线示例...tek-tips.com/faqs.cfm?fid=1958 但你的方式更好。 【参考方案1】:SET
需要位于查询的 FROM\JOIN\WHERE
部分之前。
UPDATE CE
SET sJobNumber = AD.JobNumber
FROM CostEntry CE
INNER JOIN ActiveCostDetails As AD
ON CE.lUniqueID = AD.UniqueID
WHERE CE.SEmployeeCode = '002'
AND SubString(CostCentre, 1, 1) = sDepartmentCode
AND substring(CostCentre, 3, 1) = sCategoryCode
AND substring(CostCentre, 5, 2) = sOperationCode
【讨论】:
+1:SS2000 Update documentation @Joe Stefanelli - 关闭,但解析器不喜欢设置别名时的名称。 这项工作:更新 CE SET CE.sJobNumber = AD.JobNumber FROM CostEntry CE INNER JOIN ActiveCostDetails As AD ON CE.lUniqueID = AD.UniqueID WHERE CE.SEmployeeCode = '002' AND SubString(CostCentre, 1, 1) = sDepartmentCode AND substring(CostCentre, 3, 1) = sCategoryCode AND substring(CostCentre, 5, 2) = sOperationCode @MAW74656:我知道我的眼睛随着年龄的增长越来越差,但这不是我给你的吗? @Joe Stefanelli - 嗯,你的权利。也许我是那个眼睛不好的人!【参考方案2】:一旦为表设置了别名,就不能使用表名。以这种方式尝试您的查询,它会起作用。
UPDATE CostEntry CE
INNER JOIN
ActiveCostDetails AD
ON (CE.lUniqueID = AD.UniqueID)
SET CE.sJobNumber = AD.JobNumber
WHERE CE.SEmployeeCode = '002'
AND SubString(CostCentre, 1, 1) = sDepartmentCode
AND substring(CostCentre, 3, 1) = sCategoryCode
AND substring(CostCentre, 5, 2) = sOperationCode
【讨论】:
在 mysql 的情况下是这样【参考方案3】:这应该可以工作
UPDATE CE
SET CostEntry.sJobNumber = ActiveCostDetails.JobNumber
FROM CostEntry CE
INNER JOIN ActiveCostDetails As AD ON CostEntry.lUniqueID = ActiveCostDetails.UniqueID
WHERE CostEntry.SEmployeeCode = '002'
AND SubString(CostCentre, 1, 1) = sDepartmentCode
AND substring(CostCentre, 3, 1) = sCategoryCode
AND substring(CostCentre, 5, 2) = sOperationCode
【讨论】:
以上是关于带有内部联接的 SQL 更新查询语法的主要内容,如果未能解决你的问题,请参考以下文章