delete from table where id in ( select id from (select max(id) from table where user_id = xx group by goods_id having count(goods_id)> 1)a );
看这条sql原意是想删除用户商品id重复的记录,明显是错误的,因为子查询是错误的,正解是
delete from table where id in ( select b from (select max(id) as b from table where user_id = xx group by goods_id having count(goods_id)> 1)a );
个人纠结的并不是这个,是sql子查询明明是错误的,但是mysql执行真正操作逻辑是: 当user_id=xx存在的某条记录时,会进行 delte全表,分析了许久,不知道具体怎么回事,
提醒,要是本人细心的话,应该先拿出子查询查下,直接报错就不会酿成此次悲剧了
看这条sql原意是想删除用户商品id重复的记录,明显是错误的,因为子查询是错误的,正解是
delete from table where id in ( select b from (select max(id) as b from table where user_id = xx group by goods_id having count(goods_id)> 1)a );
个人纠结的并不是这个,是sql子查询明明是错误的,但是mysql执行真正操作逻辑是: 当user_id=xx存在的某条记录时,会进行 delte全表,分析了许久,不知道具体怎么回事,
提醒,要是本人细心的话,应该先拿出子查询查下,直接报错就不会酿成此次悲剧了
解决方案 »
- 关于如何使用MFC来操作MYSQL的一些问题
- 这是什么原因啊,没有找出错来啊(数据库用的是mysql)
- 结果 自动编号
- 急!!!!mysql里面还原语句
- 【向ACMAIN_CHM提问】关于备份账户
- 急。。。在线等,请教Mysql 的old_password 密码加密问题,谢谢!!!
- jdbc连接MySQL5数据库的问题
- mysql导出问题!!!!!!!
- 急!!!询问关于postgresql触发器的问题
- MySQL开发团队如何实现测试
- WampServer(PHP + Apache + Mysql)提供掉cmd的功能吗?
- ubuntu14.04 下 mysql -uroot -p 输入密码后报错
select id from (select max(id)
-------- 这个 id 实际上取的是外层表的 id, 因为你的子查询中没有 id 这个列, 所以既然内层子查询有一条记录,那么这个查询的结果就是 = 外层 id, 很显然满足条件 id in (select id
所以不删除全表反而是不对的
select id from (select max(id) 为什么当没有max(id)这个列的时候,select id from会读全表的id呢?
----------------------- 子查询里面的 select id 返回的不是全表,是外层表的当前记录的 id
delete from table where id in (
这里的 delete 是逐条进行的,对于每一条,都去判断一次子查询,所以对于每一条,子查询都返回一个与当前记录 id 对应的 id 的记录,那最终结果当然是全部满足条件