【问题标题】:Delete duplicate records except one with join three table删除重复记录,除了一个连接三个表
【发布时间】:2016-05-17 09:44:23
【问题描述】:

我有一个从表中删除重复记录的方案,但由于数据量大且与三个表的关系,我不知道如何执行此操作。

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 是一个表,如果任何候选人有附件,那么候选人 ID 就放在这里。

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

我必须从候选人表中删除没有附件且未针对任何工作订单提交的重复候选人。此外,如果所有匹配项相同,我必须输入 1。我想从候选表中删除除canidate_id 2,4,6 之外的所有记录任何帮助。

【问题讨论】:

  • 这个问题不清楚!请提供更多详细信息、一些示例数据以及有关上次请求的更多信息。
  • 1.见归一化

标签: mysql sql


【解决方案1】:

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

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
)

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

【讨论】:

  • 重复记录怎么办
  • 根据您的描述,候选表中的重复记录在AttachmentCandidate_job_order中没有引用值,将被删除。
  • 参考表中可能有记录,也可能没有记录。我们必须同时处理这两种情况。
  • 从候选 n1,候选 n2 中删除 n1,其中 n1.candidate_id
  • 上面的查询执行时间太长,请问有什么解决办法
【解决方案2】:

试试这个:

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);

【讨论】:

  • 我们不知道不在 (2,4,6) 中的 id。重复记录呢
  • ids not in (2,4,6) 表示“我想从候选表中删除除canidate_id 2,4,6 之外的所有记录”
  • 更新了删除重复的答案。通过 select max 查找不同的行。删除其余部分。
  • 从候选 n1,候选 n2 中删除 n1,其中 n1.candidate_id
  • 查询执行时间过长。有什么解决办法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 2018-04-28
  • 2015-12-03
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多