2012-10-12 145 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'; 

¿Qué hay de malo en mi sql? Creo que el problema está en IF EXIST, pero no pude encontrar la manera de usarlo en la fila.Eliminar fila si existe

Respuesta

12

Cuando borre filas de una tabla, no necesita usar IF EXISTS - está usando una cláusula WHERE, por lo que si existe, se eliminará.

trate de cambiar su consulta a:

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'; 

Además, no es necesario especificar `` `#__menu .*`` (the columns) to be deleted - you'll just need DELETE FROM ...`. Consulte here para obtener más información sobre la sintaxis.

+1

pero puede haber nulo (simplemente no hay ninguna extensión con este ID) – Kin

+0

Tiene 'WHERE component_id = extension_id', no debería poder devolver ningún registro faltante de' #__ menu' o '#__ extensiones' con ese cláusula; para estar seguro, sin embargo, puedes cambiarlo de 'LEFT JOIN' a 'JOIN', * o * regular, puedes agregar 'component_id IS NOT NULL' (y/o)' extension_id IS NOT NULL 'a su cláusula' WHERE' – newfurniturey

+0

gracias hombre, lo intentaré – Kin

Cuestiones relacionadas