2013-02-19 13 views
5

हाय मैं निम्नलिखित एसक्यूएल क्वेरी जो मुझे देता है ProjectSchemes और योजनाएं तालिका में जो दोनों मौजूद Scheme_Id है। मैं योजनाओं तालिका से सभी रिकॉर्ड हटाना चाहता हूं जिनके पास प्रोजेक्टशेम्स तालिका का कोई रिकॉर्ड नहीं है। ऐसा मैं किस प्रकार करूं? कृपया मदद करे। मैं MSSQLकैसे हटाने के लिए रिकार्ड नहीं

select scheme_id from Schemes where Scheme_Id 
in(select s.Scheme_Id from Projects p 
inner join ProjectSchemes ps on ps.Project_Id=p.Project_Id 
inner join Schemes s on s.Scheme_Id=ps.Scheme_Id) 

उपयोग कर रहा हूँ मैं निम्न कार्य करने की कोशिश कर रहा हूँ, लेकिन यह काम नहीं कर रहा। साधन कोई रिकॉर्ड प्रभावित काम नहीं कर रहा है, लेकिन जैसा कि मैं अपने योजनाएं तालिका जाँच वहाँ इतने सारे रिकॉर्ड है कि उनके scheme_id ProjectSchemes मेज पर नहीं पाया जा सकता है

delete from Schemes where Scheme_Id 
not in(select s.Scheme_Id from Projects p 
inner join ProjectSchemes ps on ps.Project_Id=p.Project_Id 
inner join Schemes s on s.Scheme_Id=ps.Scheme_Id) 
+0

"काम नहीं कर रहा" मतलब क्या है? – wallyk

+0

आप वापस क्या कर चुके हैं? – uvinod

+0

आपका उप-चयन संभवतः कुल मान देता है। समाधान के लिए राचा का जवाब देखें। और आपको अपने डीबीएमएस निर्दिष्ट करना चाहिए। –

उत्तर

8

मैं धारणाओं से शुरू करना चाहता हूं।

  • आपका लक्ष्य ही मान्य चेन, ताकि परियोजना के बिना कोई ProjectSchemes, ProjectSchemes के बिना कोई योजनाएं है * योजनाएं - परियोजनाएं - * ProjectSchemes:

    1. आप एक chainlike डाटा मॉडल की है।
    2. NULL आपकी आईडी में से किसी एक के लिए मान्य मान नहीं है।
    3. सभी आईडी उनकी तालिका
    4. में अद्वितीय हैं आप अपने डेटाबेस

    की रेफेरेंन्शिअल सत्यनिष्ठा तंत्र का उपयोग नहीं करते एक परिणाम के अपने चयन योजनाएं तालिका में सभी योजनाएं के लिए scheme_id सूची होगी।

    ने कहा कि, आपको किसी भी परियोजना के बिना सभी प्रोजेक्टशेम्स को हटाना शुरू करना चाहिए।

    DELETE ProjectSchemes WHERE (Project_Id is NULL) OR 
    (NOT EXISTS (SELECT * FROM Projects WHERE 
          Projects.Project_Id = ProjectSchemes.Project_Id)) 
    

    एक परियोजना के बिना ProjectsSchemes हटाने के बाद अब हम योजनाएं टेबल में कुछ नए अनाथ हो सकता है: ये शून्य से एक आईडी या एक आईडी जो परियोजनाओं तालिका में नहीं मौजूद है है के साथ ProjectSchemes हैं।

    DELETE Schemes WHERE (Scheme_Id is NULL) OR 
    (NOT EXISTS (SELECT * FROM ProjectSchemes WHERE 
          ProjectSchemes.Scheme_Id = Schemes.Scheme_Id)) 
    

    अभी भी योजनाओं जिसके बिना एक परियोजना से जुड़े नहीं हैं करने के लिए एक मौका है: अगली बात अब जो शून्य से एक आईडी या एक आईडी जो ProjectsSchemes तालिका में नहीं मौजूद है करता है सब योजनाएं नष्ट करने के लिए है ProjectSchemes को हटा रहा है।

  • +0

    एक आकर्षण की तरह काम करता है !!!! आप वास्तव में समस्याओं को समझते हैं। मदद के लिए धन्यवाद अब मैं उन रिकॉर्ड्स से छुटकारा पाने में सक्षम था !!! –

    8
    DELETE FROM schemes 
    WHERE scheme_id NOT IN (
        SELECT DISTINCT scheme_id 
        FROM projectschemes 
        WHERE scheme_id IS NOT NULL 
    ) 
    

    या आप वैकल्पिक रूप से

    DELETE 
    FROM schemes 
    WHERE NOT EXISTS (
         SELECT 1 
         FROM projectschemes 
         WHERE projectschemes.scheme_id = schemes.ID 
        ) 
    
    +0

    अच्छा पकड़ो। और 'नूल' और 'IN IN' के साथ समस्या के आसपास भी हो जाता है। –

    +0

    मुझे त्रुटि मिली "एस 'के पास गलत वाक्यविन्यास।" जहां लाल रेखांकित है। मैं MSSQL –

    +2

    का उपयोग कर रहा हूं संपादित करें। यह काम करना चाहिए। – Rachcha

    3
    उपयोग कर सकते हैं
    DELETE s 
    FROM Schemes s LEFT JOIN ProjectSchemes ps ON s.Scheme_Id=ps.Scheme_Id 
    WHERE ps.Scheme_Id IS NULL 
    

    लेकिन लगता है कि आप इस

    DELETE sp 
    FROM ProjectSchemes sp LEFT JOIN Schemes s ON sp.Scheme_Id=s.Scheme_Id 
    WHERE s.Scheme_Id IS NULL 
    
    की जरूरत
    +0

    मैंने इस क्वेरी को आजमाया लेकिन यह कहता है "(0 पंक्तियां प्रभावित)" शायद कोई रिकॉर्ड नहीं मिला ps.Scheme_Id शून्य है? ProjectScheme.Scheme_Id के पास रिकॉर्ड हैं और इसमें कोई प्रविष्टि नहीं है जिसमें शून्य है। ऐसा हुआ कि दोनों योजनाएं और प्रोजेक्टशेम्स एफके द्वारा लागू नहीं किए गए थे, यही कारण है कि परियोजनाओं पर ऐसे कई रिकॉर्ड हैं जिनके पास योजना तालिका पर कोई प्रविष्टि नहीं है। –

    +0

    यदि यह क्वेरी आप कहती है (0 पंक्तियां प्रभावित) तो इसका मतलब है कि योजना तालिका में रिकॉर्ड नहीं है जो प्रोजेक्टशेम्स तालिका –

    +0

    के साथ असंबद्ध है, हो सकता है कि आप ProjectSchemes तालिका से रिकॉर्ड्स हटाएं जो योजना तालिका से अलग नहीं हैं? –

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