2012-07-13 111 views
17

我想這樣做SQL別名SELECT語句

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

是否有可能以某種方式做了「AS my_select」部分(即分配一個別名的SELECT語句)?

(注意:這是一個理論問題,我知道我能做到這一點沒有一個別名分配給SELECT語句,但我想知道我是否可以用做)

+0

這些答案是否滿意?如果你認爲它的答案,請勾選一個。 – 2012-07-16 17:33:07

回答

28

不知道你嘗試表示與語法正是隻選擇一列,但在幾乎所有的RDBMS-ES,您可以在使用子查詢FROM子句(有時稱爲「內聯視圖「):

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

在先進的「企業」 RDBMS-ES(如Oracle,SQL服務器,PostgreSQL的),您可以使用公用表表達式,它允許您通過名字來指代一個查詢並重復使用,甚至多次:

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

(例如,從http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx

+1

對於公用表表達式爲+1。 – Josien 2012-07-13 22:19:16

0

是,但你可以在你的子查詢

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

您可以使用與SELECT語句的WHERE子句做到這一點:

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

這就是ANSI/ISO SQL語法。我知道SQL Server,Oracle和DB2都支持它。不知道其他人...