我希望在 mysql 中使用带有两列作为输入的 case 表达式。这就是我想格式化代码的方式。所有代码片段都Set @a = 0; Set @b = 0;
在开始时使用,尽管可以修改这些值。我自己的用例有几个值,每个都可以是(每个超过 2 个)。
SELECT
CASE (@a , @b)
WHEN (0 , 0) THEN 'Both zero'
WHEN (1 , 0) THEN 'a is 1'
WHEN (0 , 1) THEN 'b is 1'
WHEN (1 , 1) THEN 'both 1'
ELSE NULL
END;
当以这种方式使用 case 语句时,MySql 会抛出Error Code: 1241. Operand should contain 1 column(s)
. 作为参考,以下两项工作,这让我很好奇为什么上面没有。
SELECT
IF((@a , @b) = (0 , 0),
'Both zero',
IF((@a , @b) = (1 , 0),
'a is 1',
IF((@a , @b) = (0 , 1),
'b is 1',
IF((@a , @b) = (1 , 1), 'both 1', NULL))));
和
SELECT
CASE
WHEN (@a , @b) = (0 , 0) THEN 'Both zero'
WHEN (@a , @b) = (1 , 0) THEN 'a is 1'
WHEN (@a , @b) = (0 , 1) THEN 'b is 1'
WHEN (@a , @b) = (1 , 1) THEN 'both 1'
ELSE NULL
END;
所以,问题是:在进行多列比较时,我可以使用像第一个代码片段这样的 CASE 表达式吗?如果有,请举个例子。如果不是,为什么不呢?
第三种方法对于我自己的用例来说是完全可行的,但如果 @a 和 @b 是 select 语句,它就不会了。理想的解决方案是:
- 如果输入是选择语句,则只运行一次。
- 可以轻松扩展任意数量的输入。
- 与输入类型无关(IE (@a,@b) = (0,'!@#$:abc') 是要检查的有效案例)。