仅当所有记录都存在时,Sql查询才起作用

时间:2011-02-09 20:07:31

标签: mysql sql sql-delete

DELETE FROM Profile, Images, Schedules 
 USING Profile 
INNER JOIN Images USING(profile_id) 
INNER JOIN Schedules USING(profile_id) 
     WHERE Profile.profile_id = 47

我有这段mysql代码删除了具有配置文件47的所有记录。 但是,假设Schedules没有47,则整个查询不会删除其他表中的其他记录。

基本上我希望它删除所有内容,无论日程表是否有记录。

另一个选项是在执行删除查询之前查询数据库以检查Schedules表吗?

3 个答案:

答案 0 :(得分:2)

做起来不简单:

BEGIN;
DELETE FROM Schedules WHERE Profile_ID = 47;
DELETE FROM Images    WHERE Profile_ID = 47;
DELETE FROM Profile   WHERE Profile_ID = 47;
COMMIT;

如果合适,将其包装到存储过程中。

答案 1 :(得分:0)

您可以切换到LEFT JOIN。这将删除Profile where id=47 +在图像和计划中找到的任何相关记录。

DELETE FROM Profile, Images, Schedules 
 USING Profile 
LEFT JOIN Images USING(profile_id) 
LEFT JOIN Schedules USING(profile_id) 
     WHERE Profile.profile_id = 47

答案 2 :(得分:0)

使用OUTER联接来访问可能没有支持记录的表:

DELETE FROM p, i, s
      USING PROFILE p 
  LEFT JOIN IMAGES i ON i.profile_id = p.profile_id
  LEFT JOIN SCHEDULES s ON s.profile_id = p.profile_id
      WHERE p.profile_id = 47

这是good primer on JOINs