目标

当传入参数 @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) 对空不可判的更多相关文章

  1. MySQL的IFNULL解决判空问题

    问题:mybatis返回的null类型数据消失,导致前端展示出错 思路:如果查询出的结果是空值,应当转换成空字符串.当然在前端也能进行判断,但要求后台实现这个功能. 解决方案: 使用如下方法查询: S ...

  2. MySql 中IFNULL、ISNULL、NULLIF用法(数据库判空)

    来源:http://blog.csdn.net/a466350665/article/details/52994761 http://blog.csdn.net/xingyu0806/article/ ...

  3. SQLServer的ISNULL函数和Mysql的IFNULL函数

    SQL Serve的ISNULL函数: ISNULL(check_expression,replacement_value) 1.check_expression与replacement_value的 ...

  4. mysql的IFNULL()函数FLOOR(),ROUND()函数

    用法说明 1 IFNULL(expr1,expr2) 如果 expr1 不是 NULL,IFNULL() 返回 expr1,否则它返回 expr2. IFNULL()返回一个数字或字符串值,取决于它被 ...

  5. MySQL中 IFNULL、NULLIF和ISNULL函数的用法

    mysql 中 ifnull().nullif().isnull()函数的用法讲解: 一.IFNULL(expr1,expr2)用法: 假如expr1不为NULL,则 IFNULL() 的返回值为ex ...

  6. mySql中IFNULL的使用说明

    IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值 具体用法如:现有学生表(tbl_stu ...

  7. MySQL 的IFNULL()、ISNULL()和NULLIF()函数

    参考与http://blog.csdn.net/xingyu0806/article/details/52080962 IFNULL(expr1,expr2) 假如expr1不为NULL,则 IFNU ...

  8. Mysql中IFNULL与IN操作

    Mysql IFNULL操作 项目中用到的,当SQL查询某个字段为空的时候,查询结果中设置其值为默认值.最笨的方法当然是对查询结果进行处理了,遍历查询结果,当为空的时候,设置其值: 代码如下 复制代码 ...

  9. MySQL的IFNULL简单使用说明

    MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数. 否则,IFNULL函数返回第二个参数. 两个参数可以是文 ...

随机推荐

  1. 【搜索】单词方阵 luogu-1101

    题目描述 给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间 ...

  2. odoo中Controller

    一:Controller 一般通过继承的形式来创建controller类,继承自odoo.http.Controller. 以route装饰器来装饰定义的方法,提供url路由访问路径: class M ...

  3. Python入门 -- 001

    在Windows系统下安装python: 从Python的官方网站(http://www.python.org/)下载最新版的程序安装包. 安装完成后设置路径,使得在Windows系统的CMD中能够通 ...

  4. Hashtable 的实现原理

    概述 和 HashMap 一样,Hashtable 也是一个散列表,它存储的内容是键值对. Hashtable 在 Java 中的定义为: public class Hashtable<K,V& ...

  5. etcd raft 处理流程图系列1-raftexample

    最近在看raft相关的代码和实现,发现etcd的raft模块在实现上还是比较灵活的,但缺点就是需要用户实现比较多的功能,如存储和网络等,同时带来的优点就是不会对用户的存储和传输作限制.网上对该模块的描 ...

  6. Jenkins插件安装失败

    插件安装失败 通常要下载国外的软件插件之类的时候,链接到国外会太慢或者被墙,这就需要我们去换镜像源 修改配置文件 我们在jenkins里更改升级站点的url后 若安装插件时还是一直卡在"安装 ...

  7. AT4828 [ABC152D] Handstand 2 TJ

    前言 洛谷题解,懂?( 题目链接 来一点不一样的方法. 正解:动态规划 / 打表数据暴力分析 考试半小时想出方法,最后输在了两个细节上. 写一篇题解以此纪念. 打表暴力程序 最开始打的暴力对拍,没想到 ...

  8. Python 统计列表中重复元素的个数并返回其索引值

    需求:统计列表list1中元素3的个数,并返回每个元素的索引 list1 = [3, 3, 8, 9, 2, 10, 6, 2, 8, 3, 4, 5, 5, 4, 1, 5, 9, 7, 10, 2 ...

  9. Spring学习笔记-DI(依赖注入)

    构造器注入(见前贴) Set注入[重点] 依赖注入:Set注入 依赖:bean对象的创建依赖于容器 注入:bean对象的所有属性由容器来注入 [环境搭建] 复杂类型 // Class Address ...

  10. C++水仙花 (如:153 = 1*1*1 + 5*5*5 + 3*3*3)

    1 #include <iostream> 2 #include <ctime> 3 using namespace std; 4 5 int main() 6 { 7 int ...