Geneste select-instructie in SQL Server

Waarom werkt het volgende niet?

SELECT name FROM (SELECT name FROM agentinformation)

Ik denk dat mijn begrip van SQL verkeerd is, omdat ik had gedacht dat dit hetzelfde zou opleveren als

SELECT name FROM agentinformation

Maakt de inner select-instructie geen resultatenset die de buitenste SELECT-instructie vervolgens opvraagt?


Antwoord 1, autoriteit 100%

U moet de subquery een alias geven.

SELECT name FROM (SELECT name FROM agentinformation) a  

of om explicieter te zijn

SELECT a.name FROM (SELECT name FROM agentinformation) a  

Antwoord 2, autoriteit 7%

Het antwoordvan Joe Stefanelli is al correct.

SELECT name FROM (SELECT name FROM agentinformation) as a  

We moeten een alias maken van de subquery omdat een query een tabelobject nodig heeft dat we krijgen door een alias voor de subquery te maken. Conceptueel worden de subqueryresultaten vervangen door de buitenste query. Omdat we een tabelobject in de outer query nodig hebben, moeten we een alias maken van de inner query.

Statementen die een subquery bevatten, nemen meestal een van de volgende vormen aan:

  • WHERE expressie [NOT] IN (subquery)
  • WAAR expressie vergelijkingsoperator [ELKE | ALLES] (subquery)
  • WAAR [NIET] BESTAAT (subquery)

Controleer voor meer subqueryregelsen subquerytypen.

Meer voorbeeldenvan Nested Subquery’s.

  1. IN / NOT IN Deze operator neemt de uitvoer van de inner query nadat de inner query is uitgevoerd, die nul of meer waarden kan hebben, en stuurt deze naar de outer query. De buitenste zoekopdracht haalt vervolgens alle overeenkomende [IN-operator] of niet-overeenkomende [NOT IN-operator] rijen op.

  2. ANY [>ANY of ANY operator neemt de lijst met waarden geproduceerd door de innerlijke query en haalt alle waarden op die groter zijn dan de minimumwaarde van de lijst. De

bijv. >ANY(100,200,300), de operator ANY haalt alle waarden op die groter zijn dan 100.

  1. ALL [>ALL of ALL operator neemt de lijst met waarden geproduceerd door de innerlijke query en haalt alle waarden op die groter zijn dan het maximum van de lijst. De

bijv. >ALL(100,200,300), de operator ALL haalt alle waarden op die groter zijn dan 300.

  1. EXISTS Het EXISTS-sleutelwoord produceert een Booleaanse waarde [TRUE/FALSE]. Deze EXISTS controleert het bestaan ​​van de rijen die worden geretourneerd door de subquery.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes