2012-07-13 9 views
17

Ich mag wäre so etwas wieSQL Alias ​​für SELECT-Anweisung

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

tun, ist es möglich, den „AS my_select“ Teil irgendwie tun (das heißt einen Alias ​​zu einer SELECT-Anweisung zuweisen)?

(Anmerkung:.. Das ist eine theoretische Frage ist mir klar, dass ich es tun kann, ohne eine Alias ​​auf eine SELECT-Anweisung zuweisen, aber ich würde gerne wissen, ob ich es mit tun kann)

+0

Waren diese Antworten zufriedenstellend? Bitte kreuzen Sie ein an, wenn Sie es als beantwortet betrachten. –

Antwort

28

Nicht sicher genau auswählen, was Sie versuchen, mit dieser Syntax zu bezeichnen, aber in fast allen RDBMS-es können Sie eine Unterabfrage in der FROM-Klausel verwenden (manchmal auch als ein " Inline-View "):

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

Im erweiterten „Unternehmen“ RDBMS-es (wie Oracle, SQL Server, PostgreSQL) Sie allgemeine Tabellenausdrücke verwenden können, die Sie auf eine Abfrage nach dem Namen beziehen können und es sogar mehrfach wieder verwenden:

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

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

+1

+1 für die allgemeinen Tabellenausdrücke. – Josien

0

Ja, Sie können jedoch nur eine Spalte in Ihrer subselect

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

du die WITH-Klausel der SELECT-Anweisung tun:

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

dass die ANSI/ISO SQL-Syntax ist. Ich weiß, dass SQL Server, Oracle und DB2 es unterstützen. Nicht sicher über die anderen ...