2011-05-27 9 views

उत्तर

110

आप इस

DELETE FROM table WHERE id NOT IN (2) 

या

DELETE FROM table WHERE id <> 2 

के रूप में की तरह कर सकते हैं @ फ्रैंक श्मिट ने नोट किया, आप भी नल मूल्यों के बारे में सावधान रहना चाहेंगे। अगर आप 2 (एनयूएलएल समेत) को हटाना चाहते हैं तो WHERE क्लॉज में OR id IS NULL जोड़ें।

+0

मैंने इस आदेश को दो बार कोशिश की .. लेकिन यह तब तक काम नहीं कर रहा जब तक मुझे एहसास नहीं हुआ कि MySQL में DELETE * .. –

+1

का उपयोग नहीं करता है लेकिन बिना * यह अच्छी तरह से काम करता है। धन्यवाद –

+0

वहां आप जाते हैं, * बाहर निकलने के लिए धन्यवाद * को हटाने के लिए उत्तर संपादित किया। – Lobo

12
delete from table where id <> 2 



संपादित करें: MySQL

वाक्य विन्यास को दूर करने के
6

कहां से खंडित करने के लिए <> का उपयोग करें।

6

आप कर सकता है निम्नलिखित:

DELETE * FROM table WHERE NOT(id = 2); 
+0

अच्छी तरह से काम करता है यदि मान संख्यात्मक नहीं है जहां नहीं (id = 'two'); – Kareem

5

WHERE id <> 2 काम करना चाहिए ठीक ... है कि आप के बाद क्या कर रहे हैं?

3

हां। अगर स्मृति मुझे सेवा देती है, तो उसे काम करना चाहिए। हमारे आप इस्तेमाल कर सकते हैं:

DELETE FROM table WHERE id <> 2 
5

औपचारिक तर्क और बीजगणित के लिए वापस देखो।

A & B & (D | E) 

की तरह एक अभिव्यक्ति के तरीके के एक जोड़े में नकार दिया जा सकता है:

  • स्पष्ट तरीका:

    !(A & B & (D | E)) 
    
  • ऊपर भी फिर से बताने से किया जा सकता है, तो आप सिर्फ याद रखने की आवश्यकता तार्किक अभिव्यक्तियों के कुछ गुण:

    • !(A & B)(!A | !B) के समतुल्य है।
    • !(A | B)(!A & !B) के बराबर है।
    • !(!A) (ए) के बराबर है।

    जो करने के लिए इसे लागू होता है पूरे अभिव्यक्ति भर में वितरित नहीं, ऑपरेटरों inverting और डबल नकारात्मक को नष्ट करने के रूप में आप साथ जाने (!):

    !A | !B | (!D & !E) 
    

तो, सामान्य रूप में, किसी भी जहां उपरोक्त नियमों के अनुसार धारा को अस्वीकार कर दिया जा सकता है।इस

select * 
from foo 
where  test-1 
    and  test-2 
    and ( test-3 
     OR test-4 
    ) 

का निषेध

select * 
from foo 
where NOT(   test-1 
      and  test-2 
      and ( test-3 
       OR test-4 
       ) 
     ) 

या

select * 
from foo 
where  not test-1 
    OR   not test-2 
    OR ( not test-3 
     and not test-4 
     ) 

कौन सा बेहतर है? यह एक बहुत ही संदर्भ-संवेदनशील प्रश्न है। केवल आप ही तय कर सकते हैं।

हालांकि, जागरूक रहें कि ऑप्टिमाइज़र क्या कर सकता है या नहीं कर सकता है। आपको इष्टतम क्वेरी प्लान से कम मिल सकता है।

23

आपका प्रश्न पहले से ही अन्य पोस्टर द्वारा उत्तर दिया था, मैं सिर्फ करते रहे कि

delete from table where id <> 2 

(या वेरिएंट उसके नहीं आईडी = 2 आदि) पंक्तियां नहीं हटा जाएगा जहां आईडी शून्य है चाहते हैं।

आप भी आईडी = शून्य के साथ हुई पंक्तियां हटाना चाहते हैं:

delete from table where id <> 2 or id is NULL 
+3

+1 कुछ पकड़ने के लिए हमने दूसरों में से कोई भी नहीं किया :) – JNK

+0

नाइस कैच फ्रैंक। – Lobo

0

मैं सिर्फ इस समस्या को हल किया गया था। यदि आप <> का उपयोग करते हैं या एक चर पर नहीं हैं, तो यह शून्य है, इसका परिणाम गलत होगा। तो <> 1 के बजाय, आप इसे इस तरह की जांच करना चाहिए:

AND (isdelete is NULL or isdelete = 0) 
संबंधित मुद्दे