Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unterabfrage mit Exists 1 oder Exists *

Nein, SQL Server ist intelligent und weiß, dass er für EXISTS verwendet wird, und gibt KEINE DATEN an das System zurück.

Quoth Microsoft:http://technet.microsoft.com/en-us/library/ms189259.aspx?ppud=4

Die Auswahlliste einer durch EXISTS eingeleiteten Unterabfrage besteht fast immer aus einem Sternchen (*). Es gibt keinen Grund, Spaltennamen aufzulisten, da Sie nur testen, ob Zeilen vorhanden sind, die die in der Unterabfrage angegebenen Bedingungen erfüllen.

Um sich selbst zu überprüfen, führen Sie Folgendes aus:

SELECT whatever
  FROM yourtable
 WHERE EXISTS( SELECT 1/0
                 FROM someothertable 
                WHERE a_valid_clause )

Wenn es tatsächlich etwas mit der SELECT-Liste machen würde, würde es einen div-by-null-Fehler auslösen. Das tut es nicht.

BEARBEITEN:Beachten Sie, dass der SQL-Standard tatsächlich darüber spricht.

ANSI SQL 1992 Standard, Seite 191 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

3) Fall:
a) Wenn <select list> "*" ist einfach in einem <subquery> enthalten das ist sofort in einem <exists predicate> enthalten , dann <select list> entspricht einem <value expression> das ist ein beliebiger <literal> .