Frage

Ich habe gerade dieses in einer WHERE-Klausel:

AND NOT (t.id = @id)

Wie funktioniert dieses vergleichen mit:

AND t.id != @id

Oder mit:

AND t.id <> @id

Ich würde immer schreiben die letzteren selbst, aber offensichtlich jemand anderes denkt anders.Wird man gehen, um führen Sie alle besser als die anderen?Ich weiß, dass mit <> oder != wird bust jegliche Hoffnungen für die Verwendung eines index, den ich hätte haben können, aber sicherlich der erste Ansatz, die oben wird das gleiche problem erleiden?

War es hilfreich?

Lösung

Diese 3 erhalten den gleichen genauen plan

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)

Es hängt auch von der Selektivität des index selbst natürlich.Ich benutze immer au_id <> @id mich

Andere Tipps

Beachten Sie, dass die != Betreiber ist nicht standard-SQL.Wenn Sie möchten, dass Ihr code portabel sein (, dass ist, wenn Sie Pflege), verwenden Sie <> statt.

Nur ein wenig Anpassung fors diejenigen, die später kommen:

Der Gleichheits-operator erzeugen einen unbekannten Wert, wenn es einen null - und der unbekannte Wert behandelt wird, eine falsche.Nicht (unbekannte) ist unbekannt

Im Beispiel unten, werde ich versuchen zu sagen, ob ein paar (a1, b1), ist gleich (a2, b2).Beachten Sie, dass jede der Spalten hat 3 Werte 0, 1 und NULL.

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

Beachten Sie, dass hier erwarten wir Ergebnisse :

  • Gleich null sein
  • nicht gleich sein, nicht gleich
  • anders anders sein

aber wir bekommen ein weiteres Ergebnis

  • Gleich null ist OK
  • Nicht Gleich null ist ???
  • Anders ist anders

Gibt es keine performance-hit, beide Aussagen sind vollkommen gleich.

HTH

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top