sql语句执行时报错,求高手解答。

mysql执行修改语句的时候,要求同一个IP在数据库里面的记录只保留3条,多出来的则将状态改为1(也就是删除状态)UPDATEtb_weibo_votes,(SELECT... mysql 执行修改语句的时候,要求同一个IP在数据库里面的记录只保留3条,多出来的则将状态改为1(也就是删除状态)
UPDATE tb_weibo_vote s , ( SELECT id,weiboid,ip,(COUNT(ip)-3) AS s_ip FROM tb_weibo_vote GROUP BY ip,weiboid HAVING s_ip>0
) v SET s.del=1 WHERE s.IP=v.ip limit s_ip
但报错了,求高手解答。谢谢!
展开
 我来答
hu0829
2012-05-25 · TA获得超过2937个赞
知道大有可为答主
回答量:2251
采纳率:50%
帮助的人:2305万
展开全部
SELECT id,weiboid,ip,(COUNT(ip)-3) AS s_ip FROM tb_weibo_vote GROUP BY ip,weiboid HAVING s_ip>0

没有使用聚合函数的字段全都要放在GROUP by后面 id字段也要放在后面
SELECT id,weiboid,ip,(COUNT(ip)-3) AS s_ip FROM tb_weibo_vote GROUP BY ip,weiboid ,id HAVING s_ip>0
更多追问追答
追问
兄弟,你这样不对吧,Group by是分组的意思吧,Group by ip,weiboid 表示的是 根据ip和weiboid来进行分组,一个微博可能对应着几个IP,当然同一个ip可能对应着几个weiboid 所以必须以ip,和weiboid同时分组才能得出结果,你现在group by后面又加了一个id进来,要知道id是唯一的,你又让他根据id来分组,那我前面的count(ip)不就没有意义了么,这样肯定出不来结果。
追答
朋友,GROUP BY 的使用规则必须是 前面没有使用聚合函数的字段必须全放在GROUP BY 后面 ,要么你不要这个ID字段,要么得把ID字段放后面
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式