首页 > 代码库 > 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)