एसक्यूएल की स्थिति क्या नहीं के बराबर है?


जवाबों:


156

आप ऐसा कर सकते हैं

DELETE FROM table WHERE id NOT IN ( 2 )

या

DELETE FROM table WHERE id <>  2 

जैसा कि @Frank Schmitt ने उल्लेख किया है, आप NULL मूल्यों के बारे में भी सावधान रहना चाहते हैं। यदि आप वह सब कुछ हटाना चाहते हैं जो नहीं है 2(NULLs सहित) तो OR id IS NULLWHERE क्लॉज में जोड़ें ।


मैंने एक-दो बार इस आदेश की कोशिश की .. लेकिन यह तब तक काम नहीं आया जब तक मुझे एहसास नहीं हुआ कि MySQL में DELETE * का उपयोग नहीं करता है ..
फ्रैंक विलेआना

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

5
यहाँ != NULLकाम करने वाले लोगों के लिए एक सामान्य टिप्पणी है कि उनका काम क्यों नहीं हो रहा है: "आप NULL के परीक्षण के लिए अंकगणितीय तुलना संचालक जैसे =, <, या <> का उपयोग नहीं कर सकते।" ( MySQL प्रलेखन से )। तो इसका मतलब है कि आपको उपयोग करना होगा IS NOT NULL
Byson

31

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

 delete from table where id <> 2

(या उसके प्रकार, नहीं आईडी = 2 आदि) उन पंक्तियों को नहीं हटाएगा जहाँ आईडी NULL है।

अगर आप भी id = NULL वाली पंक्तियों को हटाना चाहते हैं:

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

12
delete from table where id <> 2



संपादित करें: MySQL के लिए सिंटैक्स को सही करने के लिए


11

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

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

1
अच्छी तरह से काम करता है अगर मूल्य संख्यात्मक नहीं है, तो (आईडी = 'दो') नहीं;
करीम


7

औपचारिक तर्क और बीजगणित पर वापस देखें। एक अभिव्यक्ति की तरह

A & B & (D | E)

कुछ तरीकों से नकारा जा सकता है:

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

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

    • !( A & B )के बराबर है (!A | !B)
    • !( A | B )के बराबर है (!A & !B)
    • !( !A ) (A) के बराबर है।

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

        !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
       )

कौनसा अच्छा है? यह बहुत ही संवेदनशील विषय है। केवल आप ही यह तय कर सकते हैं।

हालाँकि, अवगत रहें, कि NOT का उपयोग आशावादी को प्रभावित नहीं कर सकता है या नहीं कर सकता है। आपको इष्टतम क्वेरी योजना से कम मिल सकता है।


6

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


4

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

DELETE FROM table WHERE id <> 2

3

उपयोग करने के लिए सबसे अच्छा समाधान है

DELETE FROM table WHERE id NOT IN ( 2 )

0

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

 AND (isdelete is NULL or isdelete = 0)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.