group by结果分组中的一行和分组的关系和内部结构?

weifeng378 2018-07-20 11:41:29
id                username        pwd 
1 chen 123
2 chen abc
3 li lilili

有这样 的表我要根据username删除重复的,自己写了好几个都不行,在网上找了一个可以删除,但就是看不懂:

delete from test
where id not in (select * from
(select id from test group by username)as b)

括号中的两个查询结果有什么不一样啊,我能看到的结果都一样啊。但是用select id 的结果去匹配id not in 时不行,而用select id 的结果再去select * 的时候去匹配id not in 时却可以,我不明白的是这2个匹配项有什么 不一样,为什么一个能用来做比对结果一个不能呢。
我还有问题,就是group by 的结果到底是什么 东西啊。分出来的一组和显示的一行还有把这一组当对象使用时有什么不一样,select * 的时候显示的是一行select (username)时显示的组内的行数。该怎么理解。。。。
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2018-07-24
  • 打赏
  • 举报
回复
子查询为什么要再套一层的问题,如果你不套一层,错误信息已经告诉你原因了,简单地说,就是不支持(mysql 的特性)
You can't specify target table 'test' for update in FROM clause

group by 的问题,这也是 mysql 的特性,它实际插的是
select any_value(id) from test group by username
也就是对于每组 username, id 取任意一条记录的值

简单的理解整个查询,就是把 select id from test group by username 的结果放到一个表,然后再执行外面的查询,id 不在这个 group by 的结果中
weixin_40579234 2018-07-24
  • 打赏
  • 举报
回复
不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值。
weifeng378 2018-07-23
  • 打赏
  • 举报
回复
我是想问group by 的结果是什么结构的 ,,,有知道的吗
zjcxc 2018-07-23
  • 打赏
  • 举报
回复
delete fromm test where not exists( select * from test b where b.username=test.username and b.id > test.id)
weifeng378 2018-07-23
  • 打赏
  • 举报
回复
数据库论坛哪个区人最多,这里好像没有人啊。。。。。
MW_long 2018-07-21
  • 打赏
  • 举报
回复
select 查询 后面的 group by 字段值在整个查询结果 里面是唯一的,没有重复的, 在使用 聚函数 (sum, count, avg....) 这种情况下使用

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧