在实际开发中,我们会遇到如下几种情况:
查询数据库表中某些字段值相等的记录
删除数据库表中某些字段值相等的记录,不做保留
删除数据库表中某些字段值相等的记录,保留最新的一条记录
下面看一个数据库表
第一种情况:老板说把工资相等的部门查出来
首先我们先根据工资相等这个条件筛选出那几个工资相等
select salary from test GROUP BY salary having COUNT(salary)>1
查出工资为6500的不止一个部门,根据这个6500作为条件,查出该条记录
select * from test where salary in (select salary from test GROUP BY salary having COUNT(salary)>1)
第二种情况:老板说把工资相等的都删了
首先我们先根据工资相等这个条件筛选出那几个工资相等
select salary from test group by salary HAVING count(salary)>1
根据工资相等这个条件,删除所有记录
create table temp as select salary from test group by salary HAVING count(salary)>1
delete from test WHERE salary in(select salary from temp2);
drop table temp
由于在mysql中不支持一条语句动态更新一个表的记录,所以我们创建一个临时表来保存删除的条件,实际开发中,考虑到效率问题,提倡建立第三张中间表来操作
第三张情况:老板说把部门信息重复的记录删除了,保存最近一次的更新记录
首先我们查找出部门相等的值和最早一次插入的值
select dept,min(id) as 'minId' from test group by dept HAVING COUNT(dept)>1
我们商务和测试都是重复记录存在的,保留最近一次插入的记录,由于我们的ID是自动增长的,这里得到的是最早插入的,所以我们在部门相等的情况下删除最小的id即可
create table temp as select dept,min(id) as 'minId' from test group by dept HAVING COUNT(dept)>1
DELETE from test where id in (select minId from temp)
DROP table temp
这样,上面三种常遇见的三种操作都实现了