2011-11-17 21 views
5

मैं तालिका चर में मेनू और सबमेनस बना रहा हूं। (एक ही तालिका में विशिष्ट अभिभावक बाल रिकॉर्ड) सभी शीर्ष मेनू के लिए पेरेंट आईडी कॉल शून्य है। और उनके बच्चे के लिए माता-पिता इन अभिभावक मेनू का मेनू आईडी होगा। (इस पर निर्भर करता है कि किस प्रकार का उपयोगकर्ता लॉग बनाता है) अब मुझे क्या करना है यदि विशेष माता-पिता के पास कोई बच्चा नहीं है, तो मैं इस तालिका चर से इस अभिभावक रिक्रोड को हटाना चाहता हूं।
मुझे पता है कि मैं इसे कर्सर के साथ या पंक्ति ऑपरेशन द्वारा पंक्ति के साथ कर सकता हूं। क्या मैं इसे किसी अन्य तरीके से कर सकता हूं?यदि बच्चा मौजूद नहीं है तो माता-पिता रिकॉर्ड हटाएं

+0

आप एक रखरखाव काम (यानी एक बार) के रूप में यह करने के लिए करना चाहते हैं, या एक के रूप में नियमित घटना, जब भी कोई बच्चा हटा दिया जाता है? – Oded

उत्तर

3

अपनी मेज संरचना को देखने के बिना यह आप सटीक क्वेरी बताने के लिए आप की आवश्यकता होगी लेकिन, अगर मैं आपके सवाल का सही ढंग से समझ, तुम बस की तरह कुछ करने की ज़रूरत है मुश्किल है यह:

DELETE T 
FROM MyTable T 
WHERE NOT EXISTS(SELECT * FROM MyTable WHERE ParentID = T.MenuID) 
    AND T.ParentID IS NULL 

यह क्वेरी उन सभी मेनू रिकॉर्ड्स को खोजने के लिए एक सहसंबंधित सबक्वायरी है जिसमें बाल रिकॉर्ड नहीं हैं। यह एसक्यूएल के EXISTS खंड का उपयोग करता

1

आप कुछ इस तरह कर सकता है:

delete from yourtable yt where not exists (select * from yourtable yt2 where yt.id = yt2.parentid) and yt.parentid is null 
4

इस तरह एक एकल बयान (के रूप में उपयोग करने का विकल्प मौजूद है) यह करना चाहिए:

delete p 
from 
    tblMenu p 
    left join tblMenu c on p.ID = c.ParentID 
where 
    p.ParentID is null --Ensures that the item to delete is at the top 
    and c.ParentID is null --Finds top level items with no children 
संबंधित मुद्दे