जवाबों:
आप ऐसा कर सकते हैं
DELETE FROM table WHERE id NOT IN ( 2 )
या
DELETE FROM table WHERE id <> 2
जैसा कि @Frank Schmitt ने उल्लेख किया है, आप NULL मूल्यों के बारे में भी सावधान रहना चाहते हैं। यदि आप वह सब कुछ हटाना चाहते हैं जो नहीं है 2
(NULLs सहित) तो OR id IS NULL
WHERE क्लॉज में जोड़ें ।
!= NULL
काम करने वाले लोगों के लिए एक सामान्य टिप्पणी है कि उनका काम क्यों नहीं हो रहा है: "आप NULL के परीक्षण के लिए अंकगणितीय तुलना संचालक जैसे =, <, या <> का उपयोग नहीं कर सकते।" ( MySQL प्रलेखन से )। तो इसका मतलब है कि आपको उपयोग करना होगा IS NOT NULL
।
आपके प्रश्न का उत्तर पहले ही अन्य पोस्टरों द्वारा दिया गया था, मैं सिर्फ यह बताना चाहूंगा कि
delete from table where id <> 2
(या उसके प्रकार, नहीं आईडी = 2 आदि) उन पंक्तियों को नहीं हटाएगा जहाँ आईडी NULL है।
अगर आप भी id = NULL वाली पंक्तियों को हटाना चाहते हैं:
delete from table where id <> 2 or id is NULL
आप निम्नलिखित कर सकते हैं:
DELETE * FROM table WHERE NOT(id = 2);
औपचारिक तर्क और बीजगणित पर वापस देखें। एक अभिव्यक्ति की तरह
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 का उपयोग आशावादी को प्रभावित नहीं कर सकता है या नहीं कर सकता है। आपको इष्टतम क्वेरी योजना से कम मिल सकता है।
हाँ। अगर स्मृति मेरी सेवा करती है, तो मुझे काम करना चाहिए। हमारा उपयोग आप कर सकते हैं:
DELETE FROM table WHERE id <> 2
मैं बस इस समस्या को हल कर रहा था। यदि आप <> का उपयोग करते हैं या एक चर पर नहीं है, तो यह अशक्त है, इसका परिणाम गलत होगा। इसलिए <> 1 के बजाय, आपको इसे इस तरह से जांचना होगा:
AND (isdelete is NULL or isdelete = 0)
id != NULL
अनुरूप काम नहीं करते हैं।