4

子が存在しない親テーブルからレコードを削除するクエリを作成するにはどうすればよいですか?

テーブルと、履歴書テーブルを参照するためのフィールドを持つresumeテーブルがあります。そのようなresume_idを持つレコードがないresumeテーブルのすべてのレコードを削除する必要があります。personal_skillresume_idpersonal_skill

私はこのようにそれをやろうとしました:

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

しかし、このクエリは失敗します。これは、SELECT部分​​で削除しようとしているテーブルを使用できないためです。

4

4 に答える 4

8

あなたの試みはここで明らかに機能します:

 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
于 2013-03-22T07:50:36.437 に答える
2

これを行う:

DELETE FROM  resume
WHERE version = 0
AND (SELECT COUNT(*) FROM personal_skill x WHERE x.resume_id = id)=0
于 2013-03-22T07:44:18.773 に答える
1

これを試して:

DELETE resume FROM
resume LEFT OUTER JOIN personal_skill
ON resume.resume_id = personal_skill.resume_id
WHERE personal_skill.resume_id IS NULL
于 2013-03-22T07:48:50.000 に答える
1

LEFT JOIN 構文を試してください:

DELETE R 
FROM resume R
LEFT JOIN personal_skill PS ON PS.resume_id = R.id
WHERE PS.id IS NULL AND R.version = 0
于 2013-03-22T07:50:15.093 に答える