[英]Set a variable inside case statement in mysql
I have the following scenario 我有以下情况
SELECT
...
...
(
@var1 = MAX(IF(table1.name='Mod', table1.value, NULL))
@var2 = MAX(IF(table1.name='Man', table1.value, NULL))
CASE
WHEN @var1 IS NOT NULL && @var2 IS NOT NULL THEN @var1+"/"+@var2
WHEN @var1 IS NULL && @var2 IS NOT NULL THEN @var2
WHEN @var1 IS NOT NULL && @var2 IS NULL THEN @var1
ELSE NULL
END) AS "col44",
This is throwing me an exception in the mysql console. 这在mysql控制台中引发了异常。
Can't we do a variable assignment in the general mysql select query? 我们不能在一般的mysql select查询中进行变量赋值吗?
What about this? 那这个呢?
SELECT ...
, @var1 = MAX(IF(table1.name='Mod', table1.value, NULL))
, @var2 = MAX(IF(table1.name='Man', table1.value, NULL))
, CASE
WHEN @var1 IS NOT NULL && @var2 IS NOT NULL THEN @var1+"/"+@var2
WHEN @var1 IS NULL && @var2 IS NOT NULL THEN @var2
WHEN @var1 IS NOT NULL && @var2 IS NULL THEN @var1
ELSE NULL
END AS "col44"
Note the addition of commas, and removal of parenthesis. 请注意添加逗号,并删除括号。
Alternatively, you could just use a subquery. 或者,您可以只使用子查询。 (In my experience, variables in queries can become unpredictable when used in conjunction with aggregation; this avoids the variables altogether). (以我的经验,查询中的变量与聚合一起使用时可能变得不可预测;这完全避免了变量)。
SELECT ...
, CASE
WHEN modMax IS NOT NULL && manMax IS NOT NULL THEN modMax+"/"+manMax
WHEN modMax IS NULL && manMax IS NOT NULL THEN manMax
WHEN modMax IS NOT NULL && manMax IS NULL THEN modMax
ELSE NULL
END AS "col44"
FROM (
SELECT ...
, MAX(IF(table1.name='Mod', table1.value, NULL)) AS modMax
, MAX(IF(table1.name='Man', table1.value, NULL)) AS manMax
...
) AS subQ
Additional note: Watch out for modMax+"/"+manMax
; 附加说明:注意modMax+"/"+manMax
; it may end up giving you an integer calculated from modMax+0+manMax, instead of a string. 最终可能会给您一个从modMax + 0 + manMax计算得出的整数,而不是字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.