2012-07-13 13 views
17

mi piacerebbe fare qualcosa di simileSQL per SELECT

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

E 'possibile fare in qualche modo la parte "AS my_select" (vale a dire assegnare un alias per un'istruzione SELECT)?

(Nota:.. Si tratta di una questione teorica mi rendo conto che posso farlo senza assegnare un alias per un'istruzione SELECT, ma vorrei sapere se posso farlo in questo)

+0

Queste risposte sono state soddisfacenti? Si prega di spuntare uno se si considera che ha risposto. –

risposta

28

Non so esattamente che cosa si prova a indicare con che la sintassi, ma in quasi tutti i RDBMS-es è possibile utilizzare un subquery nella clausola FROM (a volte chiamato " inline-view "):

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

In avanzate "impresa" RDBMS-es (come Oracle, SQL Server, PostgreSQL) è possibile utilizzare espressioni di tabella comuni, che consente di fare riferimento a una query per nome e riutilizzarlo anche più volte:

-- 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; 

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

+1

+1 per le espressioni di tabella comuni. – Josien

0

Sì, ma è possibile selezionare solo una colonna nella vostra selezione secondaria

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

È possibile farlo utilizzando la clausola WITH dell'istruzione SELECT:

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

questo è l'ANSI/ISO sintassi SQL. So che SQL Server, Oracle e DB2 lo supportano. Non sono sicuro degli altri ...