MySQL:删除没有子节点的父记录

如何编写从父表中删除没有子项的记录的查询?

我有一个表简历和一个表personal_skill,它有一个resume_id字段来引用简历表.我需要删除恢复表中没有具有此类resume_id的personal_skill记录的所有记录.

我试着这样做:

    DELETE
    FROM
      resume
    WHERE
      version = 0
      AND NOT EXISTS (SELECT NULL
                      FROM
                        personal_skill x
                      WHERE
                        x.resume_id = id)

但是这个查询失败,因为我无法使用我在SELECT部分​​中删除的表.

最佳答案
你的尝试明白在这里工作:

 DELETE 
 FROM resume     
 WHERE version = 0
   AND NOT EXISTS (
     SELECT id                       
     FROM personal_skill x
     WHERE x.resume_id = resume.id
  );

如果没有,也许普通的id就是问题(personal_skill有一个personal_skill.id列吗?).

另一种选择是:

 DELETE resume  
 FROM resume 
 LEFT JOIN personal_skill 
    ON personal_skill.resume_id=resume.id 
 WHERE personal_skill.id IS NULL; -- or any non-NULLable column from personal_skill

转载注明原文:MySQL:删除没有子节点的父记录 - 代码日志