Sind die beiden folgenden Aussagen gleichwertig?
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3,4,5) AND some_other_expr
und
SELECT [...]
FROM [...]
WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr
Gibt es eine Art Wahrheitstabelle, mit der ich dies überprüfen könnte?
Antworten:
And
hat Vorrang vorOr
, auch wenna <=> a1 Or a2
ist nicht dasselbe wie
denn das würde ausgeführt werden als
und was Sie wollen, um sie gleich zu machen, ist das Folgende (mit Klammern, um Vorrangregeln zu überschreiben):
Hier ist ein Beispiel zur Veranschaulichung:
Für diejenigen, die Referenzen konsultieren möchten (in alphabetischer Reihenfolge):
quelle
AND
dannOR
Vorrang ist Teil des SQL - Standard?declare @x tinyInt = 1
declare @y tinyInt = 0
declare @z tinyInt = 0
select case when @x=1 or @y=1 and @z=1 then'T' else 'F' end
select case when (@x=1 or @y=1) and @z=1 then'T' else 'F' end
Ich werde 2 Punkte hinzufügen:
Die beiden Ausdrücke sind also einfach nicht gleich.
Wenn Sie also die IN-Klausel auflösen, teilen Sie die seriellen ORs auf und ändern die Priorität.
quelle
Sie können Klammern verwenden, um Vorrangregeln zu überschreiben.
quelle
Abfrage zum Anzeigen einer Wahrheitstabelle mit 3 Variablen für boolesche Ausdrücke:
Ergebnisse für
(A=1) OR (B=1) AND (C=1)
:Die Ergebnisse für
(A=1) OR ( (B=1) AND (C=1) )
sind gleich.Ergebnisse für
( (A=1) OR (B=1) ) AND (C=1)
:quelle