今天写了个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)
原文地址:http://my.oschina.net/qii/blog/288021