详细描述如:http://blog.csdn.net/seven_cm/article/details/41527505
结果集只有1和0,为什么结果是不一样的?
mysql中case条件中case when 1 then xxx 与 case when a>0的结果不一样的疑惑
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
6条回答 默认 最新
- ACMAIN_CHM 2014-12-28 11:47关注
楼主的误区是在 case status when status>0 then 1 else 0 end 上,正规的写法是 case status when 0 then 1 else 0 end 注意这里是没有 status>0的。 需要注意和区分CASE的两种语法的不同。 CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 当使用了CASE value这种格式,则MYSQL会对 value 与后面的每个 compare_value 进行比较。 而楼主在语句中正是使用的 CASE value这种格式 所以当 case status when status>0 then 1 else 0 end 时,要意识到 when status>0 这里不是条件,是值。举例来说。比如第一条记录 +-----+-----+--------+ | uid | tid | status | +-----+-----+--------+ | 1 | 1 | 0 | 这条件中 status=0 则 case status when status>0 then 1 else 0 end 被处理为 case 0 when 0>0 then 1 else 0 end, 而0>0 逻辑运算的结果是 false 为 0 , 所以语句为 case 0 when 0 then 1 else 0 end 这样运算的结果为 1 其实看一下这个结果应该会更容易理解问题出在哪儿了。 mysql> select tid,status,status>0 v1,status>=0 v2, -> case status when status>0 then 1 else 0 end as c1, -> case status when status>=0 then 1 else 0 end as c2 -> from case_test; +-----+--------+------+------+------+------+ | tid | status | v1 | v2 | c1 | c2 | +-----+--------+------+------+------+------+ | 1 | 0 | 0 | 1 | 1 | 0 | | 2 | 0 | 0 | 1 | 1 | 0 | | 3 | 0 | 0 | 1 | 1 | 0 | | 4 | 0 | 0 | 1 | 1 | 0 | | 5 | 0 | 0 | 1 | 1 | 0 | | 6 | 0 | 0 | 1 | 1 | 0 | | 7 | 0 | 0 | 1 | 1 | 0 | | 8 | 0 | 0 | 1 | 1 | 0 | | 9 | 0 | 0 | 1 | 1 | 0 | | 10 | 0 | 0 | 1 | 1 | 0 | | 11 | 1 | 1 | 1 | 1 | 1 | | 12 | 1 | 1 | 1 | 1 | 1 | | 13 | 1 | 1 | 1 | 1 | 1 | | 14 | 1 | 1 | 1 | 1 | 1 | | 15 | 1 | 1 | 1 | 1 | 1 | | 16 | 1 | 1 | 1 | 1 | 1 | | 17 | 1 | 1 | 1 | 1 | 1 | | 18 | 1 | 1 | 1 | 1 | 1 | | 19 | 1 | 1 | 1 | 1 | 1 | | 20 | 1 | 1 | 1 | 1 | 1 | +-----+--------+------+------+------+------+ 20 rows in set (0.02 sec) mysql>
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
- ¥15 C# datagridview 单元格显示进度及值
- ¥15 thinkphp6配合social login单点登录问题
- ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 虚心请教几个问题,小生先有礼了
- ¥30 截图中的mathematics程序转换成matlab