记一次有趣的发现:
有一个表,总记录数是1000条,现在有一条查询语句:
#查询语句1 #找出表中id中含有‘A'或‘B'或‘C'的字段 select * from table1 where id like '%A%' or id like '%B%' or id like '%C%' ; #成功查出300条
嗯查询正常,有300条记录呢。
然后我随便再敲一次查询语句…:
#查询语句2 #找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段 select * from table1 where id not like '%A%' and id not like '%B%' and id not like '%C%' ; #成功查出400条
嗯查出了400条呢…什么?!只有400条??不是应该700条吗!!!
我如雷轰顶——哪里不对了??
按道理,“找出表中id中含有‘A'或‘B'或‘C'的字段” 应该等价于 “找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段” 的啊!这是由集合运算决定的啊!
“找出表中id中含有‘A'或‘B'或‘C'的字段”>>看作>> A∪B∪C
“找出表中id中不含有‘A'且不含有‘B'且不含有‘C'的字段”>>看作>> ∁UA∩∁UB∩∁UC
然而我们根据运算规则可知:∁U(A∪B∪C) = ∁UA ∩ ∁UB ∩ ∁UC
那就也是说,两条查询语句查出来的结果,不应该是互补的吗??理论上行数相加应该等于1000的呀,那现在怎么缺了300条呢?
奇了怪了。到底哪里错了呢??
于是换一条查询语句:
#查询语句3 #找出表中id中不含有‘A'或‘B'或‘C'的字段 select * from table1 where id not in (select * from table1 where id like '%A%' or id like '%B%' or id like '%C%' ); #成功查出700条
咦??怎么这样查,才是查询语句1的互补集呢?
我将查询语句2和查询语句3得到的结果一比较,发现:原来缺少的300条记录,是id 为NULL的情况!
也就是说,not like ‘%A%' 是不能查出NULL的记录的!
经过了解,发现:
又发现了一个细节知识~
补充:注意mysql的not in查询值中存在null值时返回的查询结果会一直为空
现在有数据库表是
当我们使用这样的查询语句时:
select * from user where username not in ( select username from user where id != 2 )
这时子查询的结果包含了null值,所以结果会一直返回空查询,而不会返回预期的id为2这一行
我们可以稍微修改一下查询形式:
select * from user where username not in ( select username from user where id != 2 and username is not null )
这时排除了username为空的列,就可以得到预期的结果了
以上为个人经验,希望能给大家一个参考,也希望大家多多支持小牛知识库。如有错误或未考虑完全的地方,望不吝赐教。
本文向大家介绍解决android.support.v4.content.FileProvide找不到的问题,包括了解决android.support.v4.content.FileProvide找不到的问题的使用技巧和注意事项,需要的朋友参考一下 在AndroidManifest.xml中加入下面这段话后, 在Android4.4.2版本的手机出现了下面的错误提示 解决方案: 第一:可能是添加Mu
和我的项目结构中的图像(我测试了它的jsp页面,出现了类似的错误,现在我在一个使用main方法(TestCalender.java)的类中测试): 我看到类似的问题和测试他们的答案,但没有发现我的错误变化!
问题内容: 这里是问题:我有一个元组列表(也可以根据需要设置)。例如: 我想找到一个清单 因为一旦将所有集合放在一起,交集就不会为空。 举个例子 结果应该是 希望问题解决。那么,如果有的话,在python中最优雅的方法是什么? 干杯 问题答案: 这些是图形的 连接组件 ,可以使用诸如的图形库找到。对于第二个示例:
本文向大家介绍解决mysql使用not in 包含null值的问题,包括了解决mysql使用not in 包含null值的问题的使用技巧和注意事项,需要的朋友参考一下 注意!!! 这个sql不回返回任何结果。要避免not in的list中出现null的情况。 另外: –如果null参与算术运算,则该算术表达式的值为null。(例如:+,-,*,/ 加减乘除) –如果null参与比较运算,则结果可视
我已经搜索了stackoverflow大约一个小时,但没有解决方案可以解决我的问题。 我想运行这段代码: 但是如果我用nodejs运行这个,我会得到这个错误: 我会感谢你的帮助。
本文向大家介绍MySQL导出数据遇到secure-file-priv问题的解决方法,包括了MySQL导出数据遇到secure-file-priv问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 ERROR 1290 (HY000): The MySQL server is running with the –secure-file-priv option so it cannot execu