4 Stimmen

Kann jemand erklären, warum NULL in dieser Abfrage verwendet wird?

In welchen Szenarien wird diese Abfrage verwendet?

select * from TableA where exists  
    (select null from TableB where TableB.Col1=TableA.Col1)

9voto

Robin Day Punkte 97662

Da die Abfrage in einem EXISTS ist, können Sie alles zurückgeben. Sie wird nicht einmal ausgewertet.

Sie können die Null durch (1/0) ersetzen, und es wird nicht einmal ein Fehler bei der Division durch Null auftreten.

5voto

S.Lott Punkte 371691

El NULL macht keinen Sinn. Das ist einfach schlechtes SQL.

El exists Klausel soll verwenden SELECT * .

Die Menschen erfinden Geschichten über die Kosten von SELECT * . Sie behaupten, dass es eine "zusätzliche" Metadatenabfrage durchführt. Das ist nicht der Fall. Sie behaupten, es handele sich um eine "Makro-Erweiterung" und erfordere viel zusätzliche Parse-Zeit. Das ist nicht der Fall.

4voto

Mubashar Punkte 11792

Die EXISTS-Bedingung gilt als "erfüllt", wenn die Unterabfrage mindestens eine Zeile zurückgibt.

Die Syntax für die EXISTS-Bedingung lautet:

SELECT-Spalten FROM Tabellen WHERE EXISTS ( subquery );

Bitte beachten Sie, dass "Select Null aus mytable" Anzahl der Zeilen in mytable zurückgeben wird, aber alle enthalten nur eine Spalte mit Null in der Zelle als die Anforderung der äußeren Abfrage ist nur zu überprüfen, ob eine Zeile in der gegebenen Bedingung wie in Ihrem Fall fallen es ist "TabelleB.Col1=TableA.Col1"

können Sie null in 1, 0 oder einen anderen in der Tabelle verfügbaren Spaltennamen ändern. 1/0 ist vielleicht keine gute Idee :)

3voto

David Hedlund Punkte 125085

Dies ist eine geschmacklose Art, alle Datensätze in TabelleA auszuwählen, die einen passenden Datensatz (Spalte1=Spalte1) in TabelleB haben. Sie hätten genauso gut z. B. "1" oder "*" auswählen können.

Ein besser lesbarer Weg, um das Gleiche zu erreichen, wäre

SELECT * FROM TableA WHERE Col1 IN ( SELECT Col1 IN TableB )

1voto

pj. Punkte 459

Bitte, bitte, alle ....

EXISTS gibt ein BOOLEAN zurück, d.h. TRUE oder FALSE. Wenn die Ergebnismenge nicht leer ist, wird TRUE zurückgegeben. Die Korrelation der Unterabfrage ist wie im obigen Fall wichtig.

d.h. Gib mir alle Zeilen in A, von denen MINDESTENS eine Spalte1 in B existiert.

Es spielt keine Rolle, was in der Auswahlliste steht. Es ist nur eine Frage des Stils.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X