常见的mysql查询业务_MySql中常见的三种业务子查询

在实际开发中,我们会遇到如下几种情况:

查询数据库表中某些字段值相等的记录

删除数据库表中某些字段值相等的记录,不做保留

删除数据库表中某些字段值相等的记录,保留最新的一条记录

下面看一个数据库表

5c46c71fd2a59c9268db4d7dffb53ccc.png

第一种情况:老板说把工资相等的部门查出来

首先我们先根据工资相等这个条件筛选出那几个工资相等

select salary from test GROUP BY salary having COUNT(salary)>1

c0b02ce3ed550acc2abd10f5a46069f3.png

查出工资为6500的不止一个部门,根据这个6500作为条件,查出该条记录

select * from test where salary  in (select salary from test GROUP BY salary having COUNT(salary)>1)

372adb50cacd0687d71c370945f65039.png

第二种情况:老板说把工资相等的都删了

首先我们先根据工资相等这个条件筛选出那几个工资相等

select salary from test group by salary HAVING count(salary)>1

c0b02ce3ed550acc2abd10f5a46069f3.png

根据工资相等这个条件,删除所有记录

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

3333ba6c884ee83c478a1b60d697b6fa.png

我们商务和测试都是重复记录存在的,保留最近一次插入的记录,由于我们的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

这样,上面三种常遇见的三种操作都实现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值