使用 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 语句更新记录

我想使用 CASE 语句来更新 sql server 2005 中的一些记录

c# 写网页,如何获得SQL select语句后的记录数?

在 case 语句中更新值并设置局部变量

再看case语句