使用 case 语句从 SELECT 更新记录。 (mysql)
Posted
技术标签:
【中文标题】使用 case 语句从 SELECT 更新记录。 (mysql)【英文标题】:UPDATE records from SELECT using a case statement. (mysql) 【发布时间】:2019-03-17 11:04:01 【问题描述】:我正在尝试使用 case 语句更新记录集合,但我得到:
错误:#1064 - 您的 SQL 语法有错误;检查手册 对应于您的 mysql 服务器版本以获得正确的语法 在'FROM(SELECT SoftwareProjects.id, SoftwareProjects.Project_Code,
Description
' 在第 8 行
这是我的查询:
UPDATE SoftwareProjects
SET BudgetStatus =
CASE
WHEN ((HoursBooked/HoursEstimated) * (100/1) < 80) THEN 1
WHEN ((HoursBooked/HoursEstimated) * (100/1) > 81 && (HoursBooked/HoursEstimated) * (100/1) < 100 ) THEN 2
ELSE 3
END
FROM
(SELECT SoftwareProjects.id, SoftwareProjects.Project_Code, Description,
BudgetStatus, TimelineStatus, QualityStatus, OverallStatus,
DeliveryDate, HoursEstimated, s4_project_id,
SUM( hours_adjusted ) AS HoursBooked
FROM SoftwareProjects
LEFT JOIN S4Admin.ts_entries ON s4_project_id =
S4Admin.ts_entries.project
GROUP BY Description
ORDER BY SoftwareProjects.Description)
【问题讨论】:
【参考方案1】:试试下面
UPDATE SoftwareProjects a
JOIN
(SELECT SoftwareProjects.id, SoftwareProjects.Project_Code, Description, BudgetStatus, TimelineStatus, QualityStatus, OverallStatus, DeliveryDate, HoursEstimated, s4_project_id, SUM( hours_adjusted ) AS HoursBooked
FROM SoftwareProjects
LEFT JOIN S4Admin.ts_entries ON s4_project_id =
S4Admin.ts_entries.project
GROUP BY Description
ORDER BY SoftwareProjects.Description) b on a.id=b.id
SET a.BudgetStatus =
CASE
WHEN ((HoursBooked/b.HoursEstimated) * (100/1) < 80) THEN 1
WHEN ((HoursBooked/b.HoursEstimated) * (100/1) > 81 && (HoursBooked/b.HoursEstimated) * (100/1) < 100 ) THEN 2
ELSE 3
END
【讨论】:
感谢您的回复,我现在收到“#1052 - 字段列表中的 'HoursEstimated' 列不明确” @cyberghost47,修改了你现在可以查看的答案以上是关于使用 case 语句从 SELECT 更新记录。 (mysql)的主要内容,如果未能解决你的问题,请参考以下文章
使用 CASE [String] 时 SELECT CASE 语句的奇怪行为
Sql server 未在查询中使用嵌套 case 语句更新记录