2011-11-03 20 views
7

tengo que preguntar cómo se puede utilizar alias en consulta de selección,uso de alias en consulta de selección

puedo necesitar este

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 
+4

Sospecho que la respuesta es cambiar su expresión 'SubQuery' escalar complejo en una expresión de tabla, pero es difícil depurar código que no podemos ver. – onedaywhen

+0

Estoy de acuerdo contigo. Necesito hacer esta consulta eficiente. – user960567

Respuesta

12

No se puede hacer esto:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) FROM TABLE 

Sin embargo, puede hacer esto:

SELECT (Another Sub Query WHERE ID = A.somecolumn) 
FROM table 
JOIN SELECT (Complex SubQuery) AS A on (A.X = TABLE.Y) 

O

SELECT (Another Sub Query) 
FROM table 
WHERE table.afield IN (SELECT Complex SubQuery.otherfield) 

El problema es que no se puede hacer referencia a los alias de este tipo en las cláusulas SELECT y WHERE, porque no se han evaluado en el momento de la selección o donde se ejecuta parte.
También puede usar una cláusula having, pero al tener cláusulas no se usan índices, y se deben evitar si es posible.

+0

?? Quizás quisiste decir: 'WHERE ID = A.Socketcolumn' –

+0

Tú (y el OP) están usando' A' como un alias de tabla y como un alias de columna (en diferentes lugares). –

+0

@ycubcube, lo arregló ahora. – Johan

2

Puede volver a escribir su consulta como esta

SELECT Complex.A, (Another Sub Query WHERE ID = Complex.A) 
FROM TABLE 
CROSS JOIN ((Complex SubQuery) AS A) Complex 
0

Otra solución que se puede utilizar:

SELECT (Complex SubQuery) AS A, (Another Sub Query WHERE ID = A) 
FROM 
TABLE MAIN 
OUTER APPLY (SELECT (Complex SubQuery) AS A) 
Cuestiones relacionadas