今天在做sql语句练习的时候遇到这样一个题目:删除除了id之外的其他字段完全相同的记录(留下id较大的记录)。


我用的就是这样一张表compares,按照题目的意思。如果sql语句执行成功,应该只剩下2,3,4,5这四条记录。


我的思路是

1.先将id最大的并且其他字段相同的记录选出来。


select MAX(id) from compares GROUP BY (col1+col2+col3)

结果如下:



2.下面就是删除id不在其中的数据。



delete from compares where id not in (select MAX(id) from compares GROUP BY (col1+col2+col3));

结果如下:


这个错误的意思是说,不能先选出表中的某些值,再更新这张表。


3.针对这个错误,我决定通过中间表来过渡一下。红色部分是较之前多出来的部分。

delete from compares where id not in (select * from(select MAX(id) from compares GROUP BY (col1+col2+col3)) t);

结果就出来了。






更多相关文章

  1. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 用$传
  2. 保持最新的一个字段值,直到它发生变化,然后保持其最新的字段值
  3. 替换wordpress WP_POSTS表中post_date字段的年份(4位数)
  4. MySql 优化之like语句
  5. 如何以varchar字段为编号?
  6. c语言把mysql数据库语句和变量封装为一个语句
  7. sql语句之union与join的区别
  8. MySQL中一些查看事务和锁情况的常用语句
  9. 常见几种数据库中自增字段的设置方法(转)

随机推荐

  1. XML的简介与开发详解(图文)
  2. XML文件解析汇总SAX/DOM/PULL的详细介绍
  3. XmlDocument操作xml文档的示例代码
  4. XML解析中的namespace初步了解
  5. XML解析器-在js中解析xml文件
  6. 详细介绍CMarkup类操作Xml总结
  7. 在XML布局里给View设置点击事件的案例分
  8. XML-RPC体验详解
  9. 详细介绍XML解析(图文)
  10. 详细介绍XML注入的介绍与代码防御