删除重复记录,但加入三个表

时间:2016-05-16 13:28:27

标签: mysql sql

我有一个从表中删除重复记录的方案,由于大数据和与三个表的关系,我无法理解如何执行此操作。

candidates_table是包含重复记录的候选表。 和字段是

candidate Table : 

candidate_id |f_name |l_name| skills

 1             Ab       c        php,MySQL 
 2             Ab       c        php,MySQL,java script
 3             cd       g        Java,hibernate,spring 
 4             cd       g        Java,hibernate 
 5             ef       h        XML,Web service
 6             ef       h        XML,Web service,json

Attachment Table:

attachment_id |candidate_id 

 1             2        
 2             4     
 3             8      
 4             9     
 5             10     

Canidate_job_order Table:

joborder_id |candidate_id 

 1             2        
 2             4     
 3             8      
 4             9     
 5             10     
如果任何候选人有附件,那么

attachments_table就是一张表,那么candidate_id就在这里。

如果candidate_id是针对任何工作订单提交的,则包含candidate_joborder_table。

我必须从没有附件的候选人表中删除那个重复的候选人,并且不会针对任何工作订单提交。如果所有内容都相同,我必须输入1。我想删除候选表中的所有记录,除了canidate_id 2,4,6任何帮助。

2 个答案:

答案 0 :(得分:0)

删除所有没有附件且未提交工作单的候选人。

DELETE * FROM candidate WHERE candidate_id NOT IN (
     SELECT C.candidate_id FROM candidate C
     INNER JOIN Attachment A ON A.attachment_id = C.candidate_id
     INNER JOIN Canidate_job_order CJO ON CJO.candidate_id = C.C.candidate_id
)

如果某些候选人只有附件,如果您使用外键引用表,则此删除可能不起作用!

答案 1 :(得分:0)

试试这个:

delete from candidate c where candidate_id not in (select max(candidate_id) 

from candidate 
group by f_name ,l_name, skills) 
and not exists (select 1 from Attachment A where A.attachment_id = C.candidate_id) 
and not exists (select 1 from Canidate_job_order CJO where CJO.candidate_id = C.C.candidate_id) and not in ( 2,4,6);