sql语句中case-when用法

来源:互联网 发布:留守儿童犯罪率数据 编辑:程序博客网 时间:2024/05/17 01:57

今天有个朋友问我这样一个问题,如下图,为什么1和2颠倒了,从而引出了sql中的case-when语句。


问题是这个地方为什么Activety是2,Controller是1,按照正常逻辑应该是Activety是1,Controller是2。

后来发现是sql语法有错了,应该写成如下样子:



case关键字后面不应该跟变量~那么问题来了,case语法到底是什么样的?

其实case语法有两种格式:

SELECT NAME AS NAME,CASE category WHEN 'tech' THEN 'gaga'WHEN 'words' THEN 'prince'FROM daily
SELECT NAME AS NAME,CASE WHEN category ='tech' THEN 'gaga'WHEN category ='words' THEN 'prince'FROM daily

两种方式效果相同,但是第二种方式可以做更复杂的逻辑,上文中问题在于把这两种方式写在了一起,但是问题是,写在一起语法竟然是没错的,那么最后会按照那种语法来执行呢?研究之后发现是第一语法来执行。而此时when关键字后面的值要么是true要么是false,最后sql的语义变成了case后变量和true和false比较。比较奇怪的是在mysql中,一个字符串和false比返回是真,而与true比较返回是假。这个大家可以自己去做下实验。

SELECT bigcate  FROM daily a WHERE a.bigcate=(FALSE) LIMIT 100;
类似于上面的写法返回的是全集

SELECT bigcate  FROM daily a WHERE a.bigcate=(TRUE) LIMIT 100;

上面的写法返回的是空集。

然后再回到最开始的sql去分析下,很自然就清楚结果是怎么来的了。

转载请注明出处:http://gagalulu.wang/blog/detail/17 您的支持是我最大的动力!







0 0