我想這樣做SQL別名SELECT語句
(SELECT ... FROM ...) AS my_select
WHERE id IN (SELECT MAX(id) FROM my_select GROUP BY name)
是否有可能以某種方式做了「AS my_select」部分(即分配一個別名的SELECT語句)?
(注意:這是一個理論問題,我知道我能做到這一點沒有一個別名分配給SELECT語句,但我想知道我是否可以用做)
我想這樣做SQL別名SELECT語句
(SELECT ... FROM ...) AS my_select
WHERE id IN (SELECT MAX(id) FROM my_select GROUP BY name)
是否有可能以某種方式做了「AS my_select」部分(即分配一個別名的SELECT語句)?
(注意:這是一個理論問題,我知道我能做到這一點沒有一個別名分配給SELECT語句,但我想知道我是否可以用做)
不知道你嘗試表示與語法正是隻選擇一列,但在幾乎所有的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。 – Josien 2012-07-13 22:19:16
是,但你可以在你的子查詢
SELECT (SELECT id FROM bla) AS my_select FROM bla2
您可以使用與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都支持它。不知道其他人...
這些答案是否滿意?如果你認爲它的答案,請勾選一個。 – 2012-07-16 17:33:07