MySQL中使用CASE出错,如何在MySQL中正确使用CASE..WHEN

如何在MySQL中正确使用CASE..WHEN

这里是一个演示查询,注意它非常简单,仅在base_price为0的位置获取,并且仍然select条件3:

SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price<101 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0

base_price是decimal(8,0)

当在我的数据库上运行这个时,我得到:

3 0

3 0

3 0

3 0

3 0

在CASE之后立即删除course_enrollment_settings.base_price :

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 ... END

CASE有两种不同的forms,详见手册 。 在这里,你需要第二种forms,因为你正在使用search条件 。

CASE case_value WHEN when_value THEN statements [WHEN when_value THEN statements] ELSE statements END

要么:

CASE WHEN THEN statements [WHEN THEN statements] ELSE statements END

这里CASE是第二种情况下的expression式search_condition将进行评估,如果没有search_condition是相等的,则执行else

SELECT CASE course_enrollment_settings.base_price WHEN course_enrollment_settings.base_price = 0 THEN 1

应该

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1

CASE course_enrollment_settings.base_price在这里是错误的,它应该只是CASE

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price<101 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0

一些解释。 您的原始查询将被执行为:

SELECT CASE 0 WHEN 0=0 THEN 1 -- condition evaluates to 1, then 0 (from CASE 0)compares to 1 - false WHEN 0<1 THEN 2 -- condition evaluates to 1,then 0 (from CASE 0)compares to 1 - false WHEN 0>100 and 0<201 THEN 3 -- evaluates to 0 ,then 0 (from CASE 0)compares to 0 - true ELSE 6, ...

这就是为什么你总是得到3

SELECT CASE WHEN course_enrollment_settings.base_price = 0 THEN 1 WHEN course_enrollment_settings.base_price>0 AND course_enrollment_settings.base_price<=100 THEN 2 WHEN course_enrollment_settings.base_price>100 AND course_enrollment_settings.base_price<201 THEN 3 ELSE 6 END AS 'calc_base_price', course_enrollment_settings.base_price FROM course_enrollment_settings WHERE course_enrollment_settings.base_price = 0

CASE有两种变体 ,你不使用你认为的那种变体 。

你在做什么

CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE

每个条件松散地等同于if (case_value == when_value) (伪代码)。

然而,你已经把整个条件作为when_value ,导致类似于:

if (case_value == (case_value > 100))

现在, (case_value > 100)计算结果为FALSE ,并且是您这样做的唯一条件。 所以,现在你有:

if (case_value == FALSE)

FALSE转换为0并通过生成的完整expression式if (case_value == 0)您现在可以看到为什么第三个条件触发。

你应该做什么

放下第一个course_enrollment_settings以便没有case_value ,导致MySQL知道你打算使用CASE的第二个变体:

CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE

现在你可以提供你的完整条件为search_condition 。

另外,请阅读文档以了解您使用的function。

我认为其中的一部分就是说明您在CASE之后select的值,然后使用WHEN x = y语法,这是两种使用CASE不同方法的组合。 它应该是

CASE X WHEN a THEN ... WHEN b THEN ...

要么

CASE WHEN x = a THEN ... WHEN x = b THEN ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab rootdir,Python cfg.ROOT_DIR属性代码示例

# 需要导入模块: from fast_rcnn.config import cfg [as 别名]# 或者: from fast_rcnn.config.cfg import ROOT_DIR [as 别名]def demo(net, image_name, classes):"""Detect object classes in an image using pre-computed object proposals.""&quo…

5g算法matlab怎么用,使用 MATLAB 开发 5G NR 设计

请选择其一AlabamaAlaska美属萨摩亚APO/FPO AAAPO/FPO AEAPO/FPO APArizonaArkansasCaliforniaCaroline IslandsColoradoConnecticutDelawareDistrict of ColumbiaFlorida格鲁吉亚关岛HawaiiIdahoIllinoisIndianaIowaKansasKentuckyLouisianaMaineMariana Islands马绍尔群岛Mar…

微擎cloud.mod.php,微擎“could not resolve ”、“could not resolve host”系列问题处理办法...

今天一个用户跟我说模块安装出现”could not resolve host:update.we10d.cn“报错&#xff0c;昨天在整理最近十个月用户搜索关键词排行的时候也发现”could not resolve host“、”could not resolve“还是占据不小的比例的。其实这类报错的处理方法大致相同&#xff0c;都是/…

php提交订单代码怎么写,提交代办订单示例代码

require curl.func.php;$appkey your_appkey_here;//你的appkey$illegalid 1333,1334;//违章ID$mobile 15158825888;$outorderno ;$appsecret your_appsecret_here;$queryarr array(mobile>$mobile,illegalid>$illegalid,outorderno>$outorderno);$sign makeSi…

基于matlab的信号与系统实例,华南理工大学信号与系统实验基于Matlab的信号处理实例...

第2讲基于Matlab的信号处理实例实验内容(1)(1) 读取给定的3D加速度信号文件&#xff0c;绘出信号波形&#xff1b;程序源代码&#xff1a;function sy2fid fopen(run 100m_TROUSERS POCKET_1_陈佳_1.txt,r);afscanf(fid,%d,%d,%d\n);fclose(fid);lenlength(a)/3;k1;for i1:len…

php qq接收不了,php imap接收qq邮件的问题

写一个接收邮件的代码&#xff0c;提示无法连接&#xff0c;qq邮箱已开启imap&#xff0c;下面贴上代码&#xff0c;麻烦各位帮忙看看&#xff1f;$host {imap.qq.com:993/imap/ssl}INBOX;$user *****;$pass *****;$inbox imap_open($host, $user, $pass)or die("cant…

oracle命令行打不开,关于oracle命令行上下左右键没法使用解决办法

使用rlwrap工具解决&#xff1a;sql1.下载安装readline和rlwrapvim//安装readlinebash[rootoracle opt]#wget ftp://ftp.gnu.org/gnu/readline/readline-6.2.tar.gzoracle[rootoracle opt]# tar xvf readline-6.2.tar.gzide[rootoracle opt]# cd readline-6.2工具[rootoracle r…

ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...

原文出处&#xff1a;http://blog.csdn.net/wyzxg/archive/2010/09/10/5874726.aspxundo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接这个测试的是instance recover(单实例里就是crash recovery)的恢复需要故障undo里的数据&#xff0c;一般的情况in…

php类如何变为静态调用,PHP类中静态方法如何调用非静态方法?_后端开发

php如何将字符串转成json_后端开发php将字符串转成json的方法是&#xff1a;可以通过json_encode()函数来实现。json_encode()函数用于对变量进行JSON编码&#xff0c;该函数如果执行成功&#xff0c;则返回JSON数据&#xff0c;反之则返回FALSE。PHP类中静态方法调用非静态方法…

java 简单获取Excel表格内容(初学者)

java 简单获取Excel表格内容&#xff08;初学者&#xff09; 代码&#xff1a; package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.us…

PHP的注释标记是什么,html的注释标记是什么

html的注释标记是“”&#xff0c;用来在源文档中插入注释&#xff0c;注释的内容不会被显示在浏览器页面上。只有在文本编辑器中&#xff0c;或浏览器的“查看源代码”选项打开文档时&#xff0c;才能看到注释。本教程操作环境&#xff1a;windows7系统、HTML5版、Dell G3电脑…

java向Excel文件写入数据

package cn.ccaih.read;import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream; import java.io.IOException;/*** // * 向Excel文件写入数据*…

怎么查询oracle分页查询语句,Oracle分页查询sql语句

阿里无线前端性能优化指南 &lpar;Pt&period;1 加载优化&rpar;前言 阿里无线前端团队在过去一年对所负责业务进行了全面的性能优化.以下是我们根据实际经验总结的优化指南,希望对大家有所帮助. 第一部分仅包括数据加载期优化. 图片控制 对于网页特别是电商类页面来说…

三元运算符的使用

package Day03;/*** 第一题&#xff1a;* 定义 int a 5 b 3 c 8* 1、利用if语句获取最小值打印*/ public class Day03_Demo01 {public static void main(String[] args) {//1, 利用if语句获取最小值打印int a 5, b 3, c 8;Getmax(a, b, c);// * 2、利用三元运算符获取…

在linux中 表示________目录,linux命令_文件目录操作命令

linux命令--文件和目录操作命令pwd"print working directory" 打印工作目录的绝对路径范例&#xff1a; 在bash命令行显示当前用户的完整路径系统Bash命令行的提示符是由一个称为PSI的系统环境变量控制的。修改PSI变量对应的值。page 15cdcd - 切换到当前用户上一次所…

获取10~99(包含10和99)的“总和”与“偶数”的个数

package Day03;/*** 第二题&#xff1a;* 获取10~99&#xff08;包含10和99&#xff09;的“总和”与“偶数”的个数&#xff0c;并在控制台打印输出*/ public class Day03_Demo02 {public static void main(String[] args) {// 获取10~99&#xff08;包含10和99&#x…

linux的进程pcd,LINUX下查看点云图————point cloud(.ply .vtk .pcd)

首先&#xff0c;你要确定点云的格式&#xff1a;.pcd(.vtk) 还是 .ply如果是.pcd(.vtk)&#xff0c;那么可以用pcl工具查看&#xff1a;1、安装pcl&#xff0c;官网链接点击打开链接sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pclsudo apt-get updatesud…

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 * 第10次落地时,共经过多少米?第10次反弹多高?

package Day03;/*** 第三题&#xff1a;* 题目&#xff1a;一球从100米高度自由落下&#xff0c;每次落地后反跳回原高度的一半&#xff1b;再落下&#xff0c;求它在* 第10次落地时&#xff0c;共经过多少米&#xff1f;第10次反弹多高&#xff1f;* <p>* //第一次&…

linux 文件列添加字段,如何在linux中加入所需列的文件?

我有很多文件,如下面的目录“结果”58052 results/TB1.genes.results198003 results/TB1.isoforms.results58052 results/TB2.genes.results198003 results/TB2.isoforms.results58052 results/TB3.genes.results198003 results/TB3.isoforms.results58052 results/TB4.genes.r…

在数学中10!代表10的阶乘。既代表1*2*3*4....*10; * 现在要求编程求出8!。

package Day03;/*** 第四题&#xff1a;* 在数学中10!代表10的阶乘。既代表1*2*3*4....*10;* 现在要求编程求出8!。*/ public class Day03_Demo04 {public static void main(String[] args) {Jiecheng(5);}public static void Jiecheng(int a){int b 1;StringBuffer c new …