sql >> Database >  >> RDS >> Sqlserver

Subquery met Bestaat 1 of Bestaat *

Nee, SQL Server is slim en weet dat het wordt gebruikt voor een BESTAAT, en geeft GEEN GEGEVENS terug aan het systeem.

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

De geselecteerde lijst van een subquery die door EXISTS is geïntroduceerd, bestaat bijna altijd uit een asterisk (*). Er is geen reden om kolomnamen op te sommen, omdat u alleen maar test of er rijen bestaan ​​die voldoen aan de voorwaarden die zijn opgegeven in de subquery.

Probeer het volgende om uzelf te controleren:

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

Als het daadwerkelijk iets deed met de SELECT-lijst, zou het een div-fout met nul genereren. Dat doet het niet.

EDIT:Let op, de SQL-standaard spreekt hier eigenlijk over.

ANSI SQL 1992-standaard, blz. 191 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

3) Geval:
a) Als de <select list> "*" staat gewoon in een <subquery> dat is onmiddellijk vervat in een <exists predicate> , dan de <select list> is gelijk aan een <value expression> dat is een willekeurige <literal> .



  1. Inleiding tot PL/SQL-verzamelingen in Oracle Database

  2. Parser voor Oracle SQL

  3. Kolomtelling komt niet overeen met waardetelling in rij 1

  4. De beste manier om records te tellen met willekeurige tijdsintervallen in Rails+Postgres