MySql中常見的三種業務子查詢

在實際開發中,咱們會遇到以下幾種狀況:mysql

  1. 查詢數據庫表中某些字段值相等的記錄
  2. 刪除數據庫表中某些字段值相等的記錄,不作保留
  3. 刪除數據庫表中某些字段值相等的記錄,保留最新的一條記錄

下面看一個數據庫表sql

 

第一種狀況:老闆說把工資相等的部門查出來數據庫

首先咱們先根據工資相等這個條件篩選出那幾個工資相等測試

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

查出工資爲6500的不止一個部門,根據這個6500做爲條件,查出該條記錄table

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

 

第二種狀況:老闆說把工資相等的都刪了效率

首先咱們先根據工資相等這個條件篩選出那幾個工資相等select

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

根據工資相等這個條件,刪除全部記錄

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

這樣,上面三種常碰見的三種操做都實現了

相關文章
相關標籤/搜索