我想做一些像这样的事情
(SELECT ... FROM ...) AS my_select
WHERE id IN (SELECT MAX(id) FROM my_select GROUP BY name)
是否有可能以某种方式完成"AS my_select“部分(即为SELECT语句分配别名)?
(注:这是一个理论问题。我意识到我可以在不给SELECT语句分配别名的情况下做到这一点,但我想知道我是否可以用别名来做到这一点。)
发布于 2012-07-14 06:17:47
不确定您试图用这种语法来表示什么,但在几乎所有的RDBMS中,您都可以在FROM子句(有时称为“inline-view”)中使用子查询:
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的示例
发布于 2012-07-14 06:19:21
您可以使用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都支持它。其他人不太确定...
发布于 2012-07-14 06:14:38
可以,但您只能在子选择中选择一列
SELECT (SELECT id FROM bla) AS my_select FROM bla2
https://stackoverflow.com/questions/11479044
复制相似问题