首页 > 代码库 > mysql
mysql
今天写了个sql,发现查询的数据有问题。sql如下:
select * from t where field<>‘aaa‘
数据库中,该字段某些行是自动填充的,为NULL。但是使用该语句查询,却没有包含这些数据。
之前对NULL的理解是,NULL不等于任何东西,包括NULL本身,所以用不等于NULL的时候,返回的应该是TRUE才对。
百度之后发现下面这篇文章,NULL不能和任何数据做比较。
http://jingyan.baidu.com/article/9113f81b2adc882b3214c7cb.html
使用如下sql语句是没有问题的:
select * from t where id in(select id from t where xxx=1)
但是换成更新语句,就有问题了:
delete from t where id in(select id from t where xxx=1) update t set xxx=2 where id in(select id from t where xxx=1)
因为msyql更新数据库时,子查询中的表不能和更新表为同一个表。解决这个问题的办法是,把子查询变成孙子查询,即在嵌套一层查询。
delete from t where id in(select id from (select id from t where xxx=1) x)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。