How do I write a query that deletes records from a parent table for which no children exist?
I have a table resume and a table personal_skill that has a resume_id field to refer the resume table. I need to delete all the records in the resume table for which there is no personal_skill record with such resume_id.
I tried to do it like this:
    DELETE
    FROM
      resume
    WHERE
      version = 0
      AND NOT EXISTS (SELECT NULL
                      FROM
                        personal_skill x
                      WHERE
                        x.resume_id = id)
but this query fails cause I can't use the table I'm deleting from in SELECT part.
Your try plainly works here:
 DELETE 
 FROM resume     
 WHERE version = 0
   AND NOT EXISTS (
     SELECT id                       
     FROM personal_skill x
     WHERE x.resume_id = resume.id
  );
If it doesn't, perhaps the plain id was the problem (does personal_skill have an personal_skill.id column?).
An alternative is:
 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
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With