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

मेरे एसक्यूएल में क्या गलत है? मुझे लगता है कि समस्या 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 से हटाएँ ...`। वाक्यविन्यास के बारे में अधिक जानकारी के लिए here देखें।

+1

लेकिन शून्य हो सकता है (अभी तक इस आईडी के साथ कोई एक्सटेंशन नहीं है) – Kin

+0

आपके पास 'WHERE घटक_आईडी = एक्सटेंशन_आईडी' है, तो यह किसी भी लापता रिकॉर्ड को '#__ मेनू 'या' #__ एक्सटेंशन' से वापस नहीं कर पाएगा खंड; सुरक्षित पक्ष पर रहने के लिए, हालांकि, आप इसे 'बाएं जॉइन' से नियमित रूप से 'जॉइन' में बदल सकते हैं, * या * आप 'घटक_आईडी न्यूल नहीं' जोड़ सकते हैं (और/या) 'extension_id न्यूल नहीं है 'आपके 'WHERE' खंड – newfurniturey

+0

धन्यवाद आदमी, मैं इसे – Kin

संबंधित मुद्दे