2016-04-22 2 views
0

Вот пример из этого thread:В MySQL, что означает это простое вложенное предложение SELECT?

select (
    select distinct Salary from Employee order by Salary Desc limit 1 offset 1 
)as second; 

select(...) as second выглядит запутанным для меня, потому что я никогда не видел запрос набора вместо имен столбцов может быть использовано в качестве аргумента SELECT ..

Есть ли у кого-нибудь идеи о том, как понимать вложенное предложение select? Есть ли учения об этой функции?

ответ

1

Это подзапрос в списке SELECT запроса.

Чтобы попасть туда, давайте посмотрим на некоторые другие примеры

SELECT t.id 
    , 'bar' AS foo 
    FROM mytable 
WHERE ... 
LIMIT ... 

«бар» только строковый литерал, который получает возвращается в каждой строке (в колонке с именем Foo) в результирующем из запроса.

Кроме того, MySQL позволяет выполнить запрос без в ЕКОМ

SELECT 'fee' AS fum 

Мы также можем поставить подзапрос в списке выбора запроса. Например:

SELECT t.id 
    , (SELECT r.id FROM resorts r ORDER BY r.id ASC LIMIT 1) AS id 
    FROM mytable 
WHERE ... 
LIMIT ... 

Шаблон запроса вы спросили о является ЗЕЬЕСТ без ЕКА

И единственным, выражения возвращаются является результатом подзапроса.

Например:

SELECT e.salary 
    FROM Employee e 
    GROUP BY e.salary 
    ORDER BY e.salary DESC 
    LIMIT 4,1 

Если этот запрос работает, он будет возвращать один столбец, и будет возвращать либо один, либо ноль строк. (Не более одного). Это удовлетворяет требованиям для подзапроса, используемого в списке SELECT другого запроса.

SELECT (subquery) AS alias 

С этим выполняется внешний запрос. Предложение FROM не существует, поэтому MySQL возвращает одну строку. Набор результатов будет состоять из одного столбца с именем «псевдоним».

Для каждой строки, возвращаемой внешним запросом, MySQL выполнит подзапрос в списке SELECT. Если подзапрос возвращает строку, значение выражения в списке SELECT подзапроса назначается столбцу «псевдоним» набора результатов. Если выполнение подзапроса не возвращает строку, тогда MySQL присваивает NULL столбцу «псевдоним».

Смежные вопросы