我有一个从表中删除重复记录的方案,由于大数据和与三个表的关系,我无法理解如何执行此操作。
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任何帮助。
答案 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);