2012-10-12 40 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