Mysql 之 IFNULL(expr1,expr2) 对空不可判
目标
当传入参数 @OrderId为空时 不做过滤 sql语句如下
SELECT o.* FROM `order` AS o
LEFT JOIN receivemoneyconfirm AS re ON o.OrderID=re.FK_Order
WHERE re.FK_Order=IFNULL(@OrderId,re.FK_Order)
起先一直以为 当 @OrderId为空时 对receivemoneyconfirm 表是不做过滤的
也就是
SELECT o.* FROM `order` AS o
LEFT JOIN receivemoneyconfirm AS re ON o.OrderID=re.FK_Order
与
SELECT o.* FROM `order` AS o
LEFT JOIN receivemoneyconfirm AS re ON o.OrderID=re.FK_Order
WHERE re.FK_Order=re.FK_Order #1=1
查询结果是一致的
事实上
当字段 re.FK_Order 可为空时 WHERE re.FK_Order=re.FK_Order 并不等于 WHERE 1=1 ; 因为Mysql里 null的判断是 is null
所以
SELECT o.* FROM `order` AS o
LEFT JOIN receivemoneyconfirm AS re ON o.OrderID=re.FK_Order
WHERE re.FK_Order=re.FK_Order
这样写 其实对表receivemoneyconfirm 进行了过滤 过滤条件是 re.FK_Order 不为空
正确写法
用IF(expr1,expr2,expr3)替代IFNULL(expr1,expr2)
SELECT o.* FROM `order` AS o
LEFT JOIN receivemoneyconfirm AS re ON o.OrderID=re.FK_Order
WHERE
IF(@OrderId is not null,re.FK_Order=@OrderId, TRUE)
Mysql 之 IFNULL(expr1,expr2) 对空不可判的更多相关文章
- MySQL的IFNULL解决判空问题
问题:mybatis返回的null类型数据消失,导致前端展示出错 思路:如果查询出的结果是空值,应当转换成空字符串.当然在前端也能进行判断,但要求后台实现这个功能. 解决方案: 使用如下方法查询: S ...
- MySql 中IFNULL、ISNULL、NULLIF用法(数据库判空)
来源:http://blog.csdn.net/a466350665/article/details/52994761 http://blog.csdn.net/xingyu0806/article/ ...
- SQLServer的ISNULL函数和Mysql的IFNULL函数
SQL Serve的ISNULL函数: ISNULL(check_expression,replacement_value) 1.check_expression与replacement_value的 ...
- mysql的IFNULL()函数FLOOR(),ROUND()函数
用法说明 1 IFNULL(expr1,expr2) 如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2. IFNULL()返回一个数字或字符串值,取决于它被 ...
- MySQL中 IFNULL、NULLIF和ISNULL函数的用法
mysql 中 ifnull().nullif().isnull()函数的用法讲解: 一.IFNULL(expr1,expr2)用法: 假如expr1不为NULL,则 IFNULL() 的返回值为ex ...
- mySql中IFNULL的使用说明
IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值 具体用法如:现有学生表(tbl_stu ...
- MySQL 的IFNULL()、ISNULL()和NULLIF()函数
参考与http://blog.csdn.net/xingyu0806/article/details/52080962 IFNULL(expr1,expr2) 假如expr1不为NULL,则 IFNU ...
- Mysql中IFNULL与IN操作
Mysql IFNULL操作 项目中用到的,当SQL查询某个字段为空的时候,查询结果中设置其值为默认值.最笨的方法当然是对查询结果进行处理了,遍历查询结果,当为空的时候,设置其值: 代码如下 复制代码 ...
- MySQL的IFNULL简单使用说明
MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数. 否则,IFNULL函数返回第二个参数. 两个参数可以是文 ...
随机推荐
- python02篇 字典、元组、切片
一.字典 1.1 字典的常用方法 # 字典 数据类型 {} key-value # list是挨个循环查找,字典是根据key查找value,比list遍历效率高 d = { 'username': ' ...
- Python使用笔记27--mysql操作封装类
1.面向过程 1 import pymysql 2 3 #面向过程 4 mysql_info = {'host':'127.0.0.1', 5 'port':3306, 6 'user':'root' ...
- ES6新增语法(一)——let、const、var的区别
ES6简介 ES6是ECMAScript 6.0的简称,是javascript语言的下一代标准,已经在2015年6月正式发布上线.目的就是为了统一javascript的语法标准,可以用来开发大型应用程 ...
- Java核心基础第5篇-Java面向对象_类和对象
Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...
- SpringBoot 构造器注入、Setter方法注入和Field注入对比
0. 引入 今天在看项目代码的时候发现在依赖注入的时候使用了构造器注入,之前使用过 Field 注入和 Setter 方法注入,对构造器注入不是很了解.经过查阅资料看到,Spring 推荐使用构造器注 ...
- 记录Jackson和Lombok的坑
记录Jackson和Lombok的坑 今天遇到Jackson反序列化json缺少了字段,后来研究下发现是Jackson的机制和Lombok生成的setter不一致,导致没有正确调用setter. 复现 ...
- ajax请求对返回数据data的处理
1,ajax请求会根据响应头的返回数据类型对返回的数据data变量进行不同的处理 $.get("data/user-permission-submit-" + ddo.manipu ...
- python编程面试题
# 实现需求为 注册.登录.查看昵称的功能 # def userN(): # username = input("请输入账号: \n") # password = ...
- python -- 程序结构
一.程序结构 • 定义python文件的头部模板:在File->Settings->Editor->File and Code Templates->Python script ...
- debain9显卡
# Debian 9 "Stretch" deb http://httpredir.debian.org/debian/ stretch main contrib non-free ...