Mysql的SQL语句:not like 的用法时 不能显示空值的数据。not in 中不能有空

2023 06 09 not like也有同样bug

-- 这样查,因为config_basic_station的MESSAGERECORD 有为null的查不出值
SELECT * from xhq_basic_site xbs
WHERE MESSAGERECORD not in (SELECT cbs.MESSAGERECORD FROM config_basic_station cbs)

-- 正确的应该这样查
SELECT * from xhq_basic_site xbs
WHERE MESSAGERECORD not in (
SELECT cbs.MESSAGERECORD FROM config_basic_station cbs 
WHERE cbs.MESSAGERECORD is not null
)

mysql中关于 like ,not like 的用法时不能显示空值的数据(空值不参与判断,直接过滤空值)

  • https://www.likecs.com/show-308408575.html

一般在项目中用法是(这种没办法显示空值的数据):

select * fromwhere 字段 like %aaa%;

解决空值不显示(除了显示的数据外,空值数据也可以显示):

select * fromwhere 字段 like %aaa% or 字段 is null;

注意:其中 字段 is null 必须要用is null 不能写成 字段=null

问题出现

  • 使用MyBatisPlus查询
      QueryWrapper<ConfigBasicStation> terminalIdQr = new QueryWrapper<>();
      terminalIdQr.eq("TERMINAL_ID", stationTerminalId);
      terminalIdQr.eq("ROUTE_ID", basicStation.getRouteId());
      //不包含 abc的。第一版我是这样写的。但是null的不会查出来。
      terminalIdQr.notLike("UNREAL_TERMINAL_ID", "abc");


      List<ConfigBasicStation> terminalStations = stationMapper.selectList(terminalIdQr);
  • 第一条数据,UNREAL_TERMINAL_ID = null
00000173492	120494	金葵路金槐路	10220	1	28	1	10000008		1	0	121.636719	121.636719	pdb0528	-1717986919	06:34	23:34	0	0		
00000250296	129025	金葵路金槐路	10220	1	19	1	10000008		1	0	121.636719	121.636719	pdb0528	0	06:28	23:28	0	0		abc173492
  • 执行的SQL为:
SELECT
	*
FROM
	config_basic_station 
WHERE
	TERMINAL_ID = '10000008' 
	AND ROUTE_ID = 10220 
	AND UNREAL_TERMINAL_ID NOT LIKE '%abc%'

运行后,发现问题。 第一条数据,UNREAL_TERMINAL_ID = null 的数据,查询不出来。

查询后发现:not like 的用法时不能显示空值的数据(空值不参与判断,直接过滤空值)

解决问题

                terminalIdQr.and(q ->
                        q.notLike("UNREAL_TERMINAL_ID", "sql")
                                .or()
                                .isNull("UNREAL_TERMINAL_ID")
                );
  • SQL执行如下
SELECT
	* 
FROM
	config_basic_station 
WHERE
	TERMINAL_ID = '10000008' 
	AND ROUTE_ID = 10220 
	AND (
		UNREAL_TERMINAL_ID NOT LIKE '%abc' 
	OR UNREAL_TERMINAL_ID IS NULL 
	)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值