簡體   English   中英

SELECT 語句的 SQL 別名

[英]SQL alias for SELECT statement

我想做類似的事情

(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 Server、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

您可以使用 SELECT 語句的 WITH 子句執行此操作:

;
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 都支持它。 不確定其他人...

是的,但您只能在子選擇中選擇一列

SELECT (SELECT id FROM bla) AS my_select FROM bla2

您可以將其存儲到臨時表中。

因此,您可以使用臨時表而不是執行 CTE/sub 查詢。

關於這些的好文章http://codingsight.com/introduction-to-temporary-tables-in-sql-server/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM