首页 > 数据库技术 > 详细

mysql

时间:2014-07-22 08:33:08      阅读:377      评论:0      收藏:0      [点我收藏+]

今天写了个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)


mysql,布布扣,bubuko.com

mysql

原文:http://my.oschina.net/qii/blog/288021

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!