2011-02-09 47 views
1
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 但是假設時間表沒有47,那麼整個查詢犯規刪除其他來自其他表格的記錄。SQL查詢只有當所有的記錄存在功能

基本上我希望它刪除所有內容,無論計劃是否有記錄。

另一種選擇是查詢數據庫以在執行刪除查詢之前檢查計劃表?

+1

那你爲什麼要做INNER JOIN? – rkg 2011-02-09 20:10:47

回答

0

使用外連接來訪問可能沒有支持記錄表:

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

0

您可以切換到左連接。這將刪除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

是不是很簡單的事:

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

,敷到這一點,如果合適的存儲過程。

+0

有趣。我從來沒有見過這種方法...它是否作爲一個查詢? – Adam 2011-02-09 20:22:10