Die äußere Abfrage wird vor der inneren Abfrage ausgeführt

9

Warum funktioniert das nicht?

%Vor%

Siehe SQL Geige-Demo .

Die Unterabfrage sollte Daten ausfiltern, die nicht numerisch sind, und die äußere Abfrage überträgt dies auf eine ganze Zahl, so dass ich nach etwas suchen kann & gt; 2.

Es sieht so aus, als würde die where-Klausel der äußeren Abfrage zuerst ausgeführt. Wie komme ich damit um?

    
Lock 10.04.2013, 00:42
quelle

5 Antworten

1

Sehr interessant, ich habe versucht, dies auf SQL Server zu reproduzieren und als nächstes zu finden. Ich habe Ihre Abfrage in simple geändert, um sicherzustellen, dass die Abfrage nicht fehlschlägt und ich den Ausführungsplan sehen kann:

%Vor%

Der Ausführungsplan hat Table Scan mit Prädikat:

%Vor%

Dies liegt daran, dass die SQL-Optimierungs-Engine auf diese Weise funktioniert (wie jemand sagte - niemand kann Ihnen die Reihenfolge der where-Klauseln garantieren). Eine Möglichkeit, dies zu beheben, ist wahrscheinlich die Verwendung von ISNUMERIC vor

%Vor%     
outcoldman 10.04.2013, 01:32
quelle
2

Vielleicht das:

%Vor%     
mkjasinski 10.04.2013 01:09
quelle
1

Ich hatte das Problem vorher. Was ich getan habe, war:

1, Sie können eine Ansicht haben, die folgendes bewirkt:

%Vor%

2 oder verwenden Sie die temporäre Tabelle dafür

3 oder Use-Case-Klausel:

%Vor%

hatte keine elegante Lösung, aber hoffe das hilft

    
Ethan Li 10.04.2013 01:10
quelle
0

Die Kommentare erklären, wie der Ausführungsplan (manchmal) auswählen kann, ob cast vor like ausgewertet werden soll. Eine case Aussage kann die Reihenfolge der Auswertung unterstützen, aber wie Adams erwähnt, ist diese Methode nicht 100%.

%Vor%     
Nathan Skerl 10.04.2013 01:14
quelle
0

Sie können dies versuchen, in der folgenden Abfrage wird die erste Bedingung ausgeführt und wenn sie fehlschlägt, führt sie die zweite Bedingung nicht aus

%Vor%

Und um zu beantworten, warum Ihre Anfrage nicht funktioniert, überprüfen Sie diese Erklärung hier

    
rs. 10.04.2013 04:06
quelle

Tags und Links