2012-07-13 16 views
17

me gustaría hacer algo comoalias de SQL para la instrucción SELECT

(SELECT ... FROM ...) AS my_select 
WHERE id IN (SELECT MAX(id) FROM my_select GROUP BY name) 

¿Es posible de alguna manera hacer la parte de "AS my_select" (es decir, asignar un alias a una instrucción SELECT)?

(Nota:.. Esta es una cuestión teórica que se da cuenta de que puedo hacerlo sin asignar un alias a una instrucción SELECT, pero me gustaría saber si lo puedo hacer con eso)

+0

¿Alguna de estas respuestas fue satisfactoria? Marque una si considera que fue respondida. –

Respuesta

28

No estoy seguro exactamente lo que intenta denotar con esa sintaxis, pero en casi todos los RDBMS-es se puede utilizar una subconsulta en la cláusula (a veces llamado un " inline-view "):

SELECT.. 
FROM (
    SELECT ... 
    FROM ... 
    ) my_select 
WHERE ... 

En avanzadas "empresa" RDBMS-es (como Oracle, SQL Server, PostgreSQL) que puede utilizar expresiones de tabla comunes que le permite referirse a una pregunta de nombre y volver a utilizarlo incluso varias veces:

-- Define the CTE expression name and column list. 
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear) 
AS 
-- Define the CTE query. 
(
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear 
    FROM Sales.SalesOrderHeader 
    WHERE SalesPersonID IS NOT NULL 
) 
-- Define the outer query referencing the CTE name. 
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear 
FROM Sales_CTE 
GROUP BY SalesYear, SalesPersonID 
ORDER BY SalesPersonID, SalesYear; 

(ejemplo de http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx)

+1

+1 para las expresiones de tabla común. – Josien

0

Sí, pero puede seleccionar sólo una columna en su subselección

SELECT (SELECT id FROM bla) AS my_select FROM bla2 
3

Usted puede hacer esto utilizando la cláusula de la instrucción SELECT:

; 
WITH my_select As (SELECT ... FROM ...) 
SELECT * FROM foo 
WHERE id IN (SELECT MAX(id) FROM my_select GROUP BY name) 

Esa es la norma ANSI/ISO SQL sintaxis. Sé que SQL Server, Oracle y DB2 lo admiten. No estoy seguro acerca de los demás ...

Cuestiones relacionadas