我有以下场景
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",
这在 mysql 控制台中引发了异常。
我们不能在一般的 mysql select 查询中进行变量赋值吗?
最佳答案
这个怎么样?
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"
请注意添加逗号并删除括号。
或者,您可以只使用子查询。 (根据我的经验,当与聚合结合使用时,查询中的变量可能变得不可预测;这完全避免了变量)。
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
附加说明:注意modMax+"/"+manMax
;它最终可能会给你一个由 modMax+0+manMax 计算得出的整数,而不是字符串。
关于mysql - 在mysql中的case语句中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46837290/