2017-03-02 79 views
1

我有兩個表employeedepartments。有從具有其他表的外鍵的表中刪除重複的行嗎?

ID , name , salary, dep_ID 
1 | john | 2300 | 1 
2 | smith| 1500 | 2 
3 | john | 2300 | 1 

這裏dep_id 職員表是一個foreign key

現在部門

id, name 
1 | COMPUTER SCIENCE 
2 | MATHEMATICS 

現在我想做的事情

是「從僱員表中刪除所有重複行」
+2

的MySQL或Oracle?你正在使用哪個數據庫? – GurV

+0

@ Viki888根據OP給出的示例數據,刪除重複項非常好。 'john'的兩行都有相同的部門ID。 –

+0

爲什麼你需要DEPARTMENT表?你問這個問題的方式,你不需要;但也許你的問題比你在帖子中提出的要多。那麼:你如何定義「重複」?您的EMPLOYEE表中沒有重複項,因爲它們與ID列不同。你的意思是,「除了ID列」? – mathguy

回答

1
delete from Employee 
where id not in 
     (
     select minid 
     from (
       select min(id) as minid 
       from Employee 
       group by 
         name 
       ,  salary 
       ,  dep_ID 
       ) sub 
     ) 

Example at rextester.com.

+1

@UsamaHaleem請定義「不工作」。這個查詢可以解決問題*,正如你所說的那樣*。 –

+0

也許在MySQL中你需要另一個子查詢?編輯於answer – Andomar

+0

感謝bro ..thumbs up –

1

for SQL ..

在dep_ID列上添加一個UNIQUE索引。當您編寫ALTER語句時,請包含IGNORE關鍵字:

ALTER IGNORE TABLE僱員 ADD UNIQUE INDEX idx_name(dep_ID);

這將刪除所有重複行,並避免將來的重複插入。

1

如果你不介意使用多個語句和臨時表,該解決方案適用於任何DBMS:

create table tmp as 
select min(ID), name, salary, dep_ID 
from employee 
group by name, salary, dep_ID; 

truncate table employee; 

insert into employee 
select * from tmp; 

drop table tmp; 
+0

ID列不包含重複 – Andomar

+0

@Andomar這就是爲什麼我與ID分組ID() –

+0

糟糕,你是對的,我甚至使用相同的查詢:) – Andomar

相關問題