टी-एसक्यूएल में असमानता के लिए परीक्षण

मैं बस इस मामले में कहां आया हूं:

AND NOT (t.id = @id)

इससे तुलना कैसे की जाती है:

AND t.id != @id

या इसके साथ:

AND t.id <> @id

I'd always write the latter myself, but clearly someone else thinks differently. Is one going to perform any better than the other? I know that using <> or != is going to bust any hopes for using an index that I might have had, but surely the first approach above will suffer the same problem?

0
ro fr bn
यह भी देखें: stackoverflow.com/questions/723195/…
जोड़ा लेखक Dinah, स्रोत

4 उत्तर

कोई प्रदर्शन हिट नहीं होगी, दोनों कथन पूरी तरह से बराबर हैं।

HTH

0
जोड़ा

इन 3 को एक ही सटीक निष्पादन योजना मिल जाएगी

declare @id varchar(40)
select @id = '172-32-1176'

select * from authors
where au_id <> @id

select * from authors
where au_id != @id

select * from authors
where not (au_id = @id)

It will also depend on the selectivity of the index itself of course. I always use au_id <> @id myself

0
जोड़ा
इन खंडों को नल का इलाज कैसे करते हैं? क्या वे सब समकक्ष हैं?
जोड़ा लेखक FistOfFury, स्रोत

Note that the != operator is not standard SQL. If you want your code to be portable (that is, if you care), use <> instead.

0
जोड़ा

बाद में आने वाले लोगों के लिए बस थोड़ा समायोजन:

जब समानता होती है तो समानता ऑपरेटर एक अनजान मूल्य उत्पन्न करता है और अज्ञात मान को झूठा माना जाता है। नहीं (अज्ञात) अज्ञात है

नीचे दिए गए उदाहरण में मैं यह कहने की कोशिश करूंगा कि कोई जोड़ा (ए 1, बी 1) बराबर है (ए 2, बी 2)। ध्यान दें कि प्रत्येक कॉलम में 3 मान 0, 1 और न्यूल होते हैं।

DECLARE @t table (a1 bit, a2 bit, b1 bit, b2 bit)

Insert into @t (a1 , a2, b1, b2) 
values( 0 , 0 , 0 , NULL )

select 
a1,a2,b1,b2,
case when (
    (a1=a2 or (a1 is null and a2 is null))
and (b1=b2 or (b1 is null and b2 is null))
)
then 
'Equal'
end,
case when not (
    (a1=a2 or (a1 is null and a2 is null))
and (b1=b2 or (b1 is null and b2 is null))
)
then 
'not Equal'
end,
case when (
    (a1<>a2 or (a1 is null and a2 is not null) or (a1 is not null and a2 is null))
or (b1<>b2 or (b1 is null and b2 is not null) or (b1 is not null and b2 is null))
)
then 
'Different'
end
from @t

ध्यान दें कि यहां हम परिणाम की उम्मीद करते हैं:

  • शून्य होने के बराबर
  • बराबर नहीं है बराबर
  • भिन्न होने के लिए अलग

लेकिन हमें एक और परिणाम मिलता है

  • बराबर ठीक है
  • समान नहीं है शून्य ???
  • अलग अलग है
0
जोड़ा
यह सही जवाब होना चाहिए
जोड़ा लेखक Jamie Strauss, स्रोत