2 qq 33038721 qq_33038721 于 2016.02.25 21:21 提问

mySQL 单表删除低于平均分以下的所有数据

delete from t_table where num < ( select avg(num) from
t_table)
执行报错。哪里错了吗?还是有其他方法?

4个回答

qq423399099
qq423399099   Ds   Rxr 2016.02.26 10:52
已采纳

不能先select出同一表中的某些值,再update/delete这个表(在同一语句中)
楼上说的是一种解决方法,也可以这样写,两种都可以
delete from t_table where num < (select avg(num) as num from (select * from t_table)c);
delete from t_table where num < (select * from (select avg(num) as num from t_table)v);
注:as num和最后的c或v别忘记

Nigelchian
Nigelchian 请教一下,后面的c v是什么作用?
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.26 09:12

哦,我知道了,你子查询和删除是一个表,所以不能写在一起,你需要把平均值查询好,然后再删除
set @a = (select avg(num) from t_table);
delete from t_table where num < a;

qq_33038721
qq_33038721 谢谢大神,已经解决了特别感谢
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.02.25 21:36

num是数字类型么?没看出什么错误来。

caozhy
caozhy 回复qq_33038721: 报了什么错
接近 2 年之前 回复
qq_33038721
qq_33038721 double类型
接近 2 年之前 回复
qq_33038721
qq_33038721   2016.02.26 09:08

@caoshy
蓝色是选中代码,下面是报错内容图片

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!