MySQL中 CASE WHEN THEN then后面跟常量是没问题的 如果改成字段就没值

MySQL中 CASE WHEN THEN then后面跟常量是没问题的 如果改成字段就没值,第1张

<p>可以的吧,出null是不是因为你字段的内容就是null啊。</p>

<p>

</p>

<p>这里是一个测试,可以看到使用列名value来做then的值是可以的:</p>

mysql>

select

*

from

aaa

+------+-------+

|

id

|

value

|

+------+-------+

|

1

|

1

|

|

2

|

3

|

|

3

|

4

|

|

4

|

4

|

|

5

|

4

|

|

6

|

6

|

|

8

|

8

|

|

7

|

7

|

|

9

|

8

|

|

10

|

10

|

|

11

|

11

|

|

12

|

11

|

|

13

|

11

|

|

14

|

11

|

|

15

|

12

|

+------+-------+

15

rows

in

set

(0.00

sec)

mysql>

select

id,

value,

case

id

when

1

then

value

when

2

then

2

*

value

when

3

then

'xxx'

else

0

end

as

case_col

->

from

aaa

+------+-------+----------+

|

id

|

value

|

case_col

|

+------+-------+----------+

|

1

|

1

|

1

|

|

2

|

3

|

6

|

|

3

|

4

|

xxx

|

|

4

|

4

|

0

|

|

5

|

4

|

0

|

|

6

|

6

|

0

|

|

8

|

8

|

0

|

|

7

|

7

|

0

|

|

9

|

8

|

0

|

|

10

|

10

|

0

|

|

11

|

11

|

0

|

|

12

|

11

|

0

|

|

13

|

11

|

0

|

|

14

|

11

|

0

|

|

15

|

12

|

0

|

+------+-------+----------+

15

rows

in

set

(0.00

sec)

 第一种:简单Case函数 

              case 列名

when   条件值1   then  选择项1

when   条件值2    then  选项2.......

else     默认值      end

第二种:Case搜索函数

              case  

when  列名= 条件值1   then  选择项1

when  列名=条件值2    then  选项2.......

else    默认值 end

比较: 两种格式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

还有一个问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。如下面这个例子:

CASE col

WHEN col_1 IN ( 'a', 'b') THEN '第一类'

WHEN col_1 IN ('a')      THEN '第二类'

ELSE'其他' END

这个语句中,满足条件a永远不会返回第二类,因为按顺序发现a在第一类的时候查询就已经结束了。所以case无法用于一个东西在一个分类里有不同的属性的条件。

case when 好处很明显就是非常易于看懂,相比实现同样条件用复杂的自连接查询,在逻辑上很容易看懂(自连接查询在不同的情况下可能会有BUG)。

case when的两种写法

简单判断:

要判断值的列写在case后面,when后面写值,相等的情况执行then后的语句,可以写多个when判断语句,都不满足返回else后的值,要以end结尾,end后面可以给该列指定列名。

CASE [col_name]

WHEN [value1] THEN [result1]

WHEN [value1] THEN [result2]

....

ELSE [default]

END [new_col_name]

表达式判断:

case开头,when后面写表达式,表达式为真则执行then后的语句,可以写多个when判断表达式,都不满足的情况下返回else后的值,以end结尾,end后可以为该列指定列名。

CASE

WHEN [expr] THEN [result1]

WHEN [expr] THEN [result2]

....

ELSE [default]

END [new_col_name]


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/7362934.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存