2012-10-12 38 views
6
DELETE IF EXIST `#__menu`.* 
FROM `#__menu` 
LEFT JOIN `#__extensions` ON `#__extensions`.`name` = 'com_view' 
WHERE `#__menu`.`component_id` = `#__xtensions`.`extension_id` 
AND `#__menu`.`alias` = 'view-sites' AND `#__menu`.`path` = 'view-sites' AND `#__menu`.`title` = 'View sites'; 

我的sql有什麼問題?我認爲問題在IF EXIST,但我無法弄清楚如何在行上使用它。刪除行,如果存在

回答

12

當您從表中刪除行時,不需要使用IF EXISTS - 您使用的是WHERE子句,因此如果它存在 - 它將被刪除。

試着改變你的查詢:

DELETE 
FROM `#__menu` 
LEFT JOIN `#__extensions` ON `#__extensions`.`name` = 'com_view' 
WHERE `#__menu`.`component_id` = `#__xtensions`.`extension_id` 
AND `#__menu`.`alias` = 'view-sites' AND `#__menu`.`path` = 'view-sites' AND `#__menu`.`title` = 'View sites'; 

而且,你不需要指定```#__menu .*`` (the columns) to be deleted - you'll just need DELETE FROM ...`。查看here瞭解更多關於語法的信息。

+1

但是可以爲空(只是沒有擴展名,但是這個ID) – Kin

+0

你有'WHERE component_id = extension_id',它不應該能夠從'#__ menu'或'#__ extensions'中返回任何缺失的記錄。條款;爲了安全起見,你可以將它從'LEFT JOIN'改爲正常的'JOIN',*或*你可以添加'component_id IS NOT NULL'(和/或)'extension_id IS NOT NULL '給你的'WHERE'條款 – newfurniturey

+0

謝謝你,我會試試 – Kin