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表吗?
答案 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