当前位置: 首页 > 编程笔记 >

解决mysql使用not in 包含null值的问题

金阳曜
2023-03-14
本文向大家介绍解决mysql使用not in 包含null值的问题,包括了解决mysql使用not in 包含null值的问题的使用技巧和注意事项,需要的朋友参考一下

注意!!!

select * from user where uid not in (a,b,c,null);

这个sql不回返回任何结果。要避免not in的list中出现null的情况。

另外:

–如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除)

–如果null参与比较运算,则结果可视为false。(例如:>=,<=,<> 大于,小于,不等于)

–如果null参与聚集运算,则聚集函数都置为null(使用isnull(字段,0)等方式可以避免这种情况)。除count(*), count(1), count(0)等之外(count(字段) 字段为null的行不参与计数)。

--如果在not in子查询中有null值的时候,则不会返回数据。

补充:MySQL in,not in,exists,not exists与null的恩恩怨怨

null这个东西在数据里算是个奇葩,在比较中也比较特殊,下面记录总结一下在in,not in,exists,not exists中null对判断结果的影响。

做一些描述声明,在比较符左边的我们称为左比较符,在比较符右边的我们称为右比较符,例如1 in (1,2),那么in左边的1是左比较符,in右边的(1,2)是右比较符。

1.in

1.1当左比较符是null,任何情况下都返回null。

mysql> select null in (1,2);
+---------------+
| null in (1,2) |
+---------------+
|   NULL |
+---------------+
1 row in set (0.00 sec)

mysql> select null in (1,2,null);
+--------------------+
| null in (1,2,null) |
+--------------------+
|    NULL |
+--------------------+
1 row in set (0.00 sec)

1.2当右比较符包含null,只当左比较符不为null,且右比较符包含左比较符时,返回1,其他情况均返回null。

mysql> select null in (1,2,null);
+--------------------+
| null in (1,2,null) |
+--------------------+
|    NULL |
+--------------------+
1 row in set (0.00 sec)

mysql> select 3 in (1,2,null);
+-----------------+
| 3 in (1,2,null) |
+-----------------+
|   NULL |
+-----------------+
1 row in set (0.00 sec)

mysql> select 1 in (1,2,null);
+-----------------+
| 1 in (1,2,null) |
+-----------------+
|    1 |
+-----------------+
1 row in set (0.00 sec)

2.not in

2.1当左比较符为null,任何情况都返回null。

mysql> select null not in (1,2,null);
+------------------------+
| null not in (1,2,null) |
+------------------------+
|     NULL |
+------------------------+
1 row in set (0.00 sec)

mysql> select null not in (1,2);
+-------------------+
| null not in (1,2) |
+-------------------+
|    NULL |
+-------------------+
1 row in set (0.00 sec)

2.2当右比较符包含null,当右比较符包含左比较符时返回0,其他情况均返回null。

mysql> select 1 not in (1,2,null);
+---------------------+
| 1 not in (1,2,null) |
+---------------------+
|     0 |
+---------------------+
1 row in set (0.00 sec)

mysql> select 1 not in (2,3,null); 
+---------------------+
| 1 not in (2,3,null) |
+---------------------+
|    NULL |
+---------------------+
1 row in set (0.00 sec)

3.exists

exists子查询返回null时判断为真。

mysql> select exists (select null);
+----------------------+
| exists (select null) |
+----------------------+
|     1 |
+----------------------+
1 row in set (0.00 sec)

4.not exists

not exists子查询返回null时判断为假。

mysql> select not exists (select null);
+--------------------------+
| not exists (select null) |
+--------------------------+
|      0 |
+--------------------------+
1 row in set (0.00 sec)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持小牛知识库。如有错误或未考虑完全的地方,望不吝赐教。

 类似资料:
  • 本文向大家介绍详解MySQL中的NULL值,包括了详解MySQL中的NULL值的使用技巧和注意事项,需要的朋友参考一下 我们已经看到使用WHERE子句的SQL SELECT命令来从MySQL表获取数据。但是,当我们试图给的条件比较字段或列的值为NULL,它不能正常工作。 为了处理这种情况,MySQL提供了三大运算符     IS NULL: 此运算符返回true,当列的值是NULL。     IS

  • 本文向大家介绍解决python3 json数据包含中文的读写问题,包括了解决python3 json数据包含中文的读写问题的使用技巧和注意事项,需要的朋友参考一下 python3 默认的是UTF-8格式,但在在用dump写入的时候仍然要注意:如下 在打开文件的时候要加上encoding=‘utf-8',不然会显示成乱码,如下: 在dump的时候也加上ensure_ascii=False,不然会变成

  • 本文向大家介绍MySQL中对于NULL值的理解和使用教程,包括了MySQL中对于NULL值的理解和使用教程的使用技巧和注意事项,需要的朋友参考一下 NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串''的一样的东西。不是这样的!例如,下列语句是完全不同的: 两个语句把值插入到phone列,但是第一个插入一个NULL值而第二个插入一个空字符串。第一个的含义可以认

  • 我有以下数据在我的表"设备" 我执行了下面的查询 它返回下面给出的结果 如何解决这个问题,让它忽略NULL,结果应该是

  • 本文向大家介绍request.getParameter()取值为null的解决方法,包括了request.getParameter()取值为null的解决方法的使用技巧和注意事项,需要的朋友参考一下 原因是:我只设置了id属性 而在JSP页面使用javascript的时候用ID属性,但是在后台通过Request取值的时候用的是name属性。问题就处在这里。

  • 下面列出了在MySQL服务器源码中包含的库的创建人,源码简化了MySQL的编译和安装。对于创建这些库的所有个人我们深表谢意,它使得我们的生活变得简单。 ·Fred Fish 感谢他提供的优异C调试和跟踪库。Monty对库进行了大量的小改进(速度和额外选项)。 ·Richard A. O'Keefe 感谢他提供的公共域字符串库。 ·Henry Spencer 感谢他的regex库,用在WHERE列R