在實際開發中,咱們會遇到以下幾種狀況:mysql
下面看一個數據庫表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
這樣,上面三種常碰見的三種操做都實現了