SQL-псевдоним для оператора 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, но я хотел бы знать, могу ли я сделать это с этим.)

4b9b3361

Ответ 1

Не уверен, что именно вы пытаетесь обозначить этим синтаксисом, но почти во всех RDBMS-es вы можете использовать подзапрос в предложении 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)

Ответ 2

Вы можете сделать это, используя предложение WITH оператора SELECT:

;
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 поддерживают его. Не уверен в других...

Ответ 3

Да, но вы можете выбрать только один столбец в своем подзапросе

SELECT (SELECT id FROM bla) AS my_select FROM bla2