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

Was ist falsch in meinem SQL? Ich denke, das Problem ist in IF EXIST, aber ich konnte nicht herausfinden, wie man es in der Reihe verwendet.Zeile löschen, wenn vorhanden

Antwort

12

Wenn Sie Zeilen aus einer Tabelle löschen, müssen Sie IF EXISTS nicht verwenden - Sie verwenden eine WHERE-Klausel, wenn sie also existiert, wird sie gelöscht.

Versuchen Sie bitte zum Ändern:

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

Auch Sie müssen #__menu .*`` (the columns) to be deleted - you'll just need nicht angeben `` `FROM DELETE ...`. Weitere Informationen zur Syntax finden Sie unter here.

+1

aber es kann null sein (nur noch keine Erweiterung mit dieser ID) – Kin

+0

Sie haben 'WHERE component_id = extension_id', es sollte nicht möglich sein fehlende Datensätze aus' #__ menu' oder '#__ extensions' zurückzuliefern Klausel; um auf der sicheren Seite zu sein, könntest du es entweder von einem 'LEFT JOIN' zu einem regulären' JOIN' ändern, * oder * du könntest 'component_id IS NOT NULL' hinzufügen (und/oder)' extension_id IS NOT NULL 'zu Ihrer' WHERE'-Klausel – newfurniturey

+0

danke Mann, ich werde es versuchen – Kin

Verwandte Themen