mysql - MySQL 中多种情况的语法

标签 mysql sql sql-update syntax-error case

我有一个 MySQL 更新语句,它试图重置两列:label 和 PersTrCode。 (这是在 Coldfusion 程序中。)我正在使用 CASE 语句执行此操作,但我似乎无法获得正确的语法 - 我不断收到错误。代码:

<cfquery name = 'nonull' datasource = "Moxart">
update FinAggDb
set Label = CASE 
 WHEN PersActIncOutg = 'I' && PersTrCode IS NULL THEN 'Total Income'
 WHEN PersActIncOutg = 'O' && PersTrCode IS NULL THEN 'Total Expense'
 WHEN PersActIncOutg IS NULL && PersTrCode IS NULL THEN ' '
 ELSE PersTrCode
END 
SET PersTrCode = CASE 
 WHEN PersTrCode IS NULL THEN 'Total'
 ELSE PersTrCode
END 
</cfquery>

错误是通常的信息性陈述:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET PersTrCode = CASE WHEN PersTrCode IS NULL THEN 'Total' ELSE PersTrCode ' at line 8

不允许使用多个CASE语句吗?或者有人可以告诉我如何解决这个问题吗?

最佳答案

更新语句只有一个 set 子句,其中要更新的各个列以逗号分隔。另请注意,更常见的是使用 and 而不是 &&,尽管两者在 MySQL 中都有效:

update FinAggDb
set Label = CASE 
 WHEN PersActIncOutg = 'I' AND PersTrCode IS NULL THEN 'Total Income'
 WHEN PersActIncOutg = 'O' AND PersTrCode IS NULL THEN 'Total Expense'
 WHEN PersActIncOutg IS NULL AND PersTrCode IS NULL THEN ' '
 ELSE PersTrCode
END
,  -- comma here, not a second "set" clause
PersTrCode = CASE 
 WHEN PersTrCode IS NULL THEN 'Total'
 ELSE PersTrCode
END

关于mysql - MySQL 中多种情况的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33375441/

相关文章:

mysql - 从 MySQL 服务器查询 MS-SQL 服务器

mysql - 将值插入 MySQL 中另一个表的列

MySQL,连接两列

MySQL 用另一列的平均值创建新列

MySql 如何根据该表中的分组更新表?

php - 根据 Laravel Eloquent 中的给定值排列行

Subselect 的 MySQL 排名 - Top N Results by Group

mysql 多表查询问题

javascript - 安卓云SQL

c# - 通过 C# 中的参数在 SqlCommand 中的字符串列表