以下是此thread的示例:
select (
select distinct Salary from Employee order by Salary Desc limit 1 offset 1
)as second;
select(...) as second
让我感到困惑,因为我从未见过查询集而不是列名可以用作SELECT
的参数。
有没有人有关于如何理解这样的嵌套select
子句的想法?有没有关于此功能的教程?
答案 0 :(得分:1)
这是查询的SELECT列表中的子查询。
要实现目标,让我们看看其他一些例子
SELECT t.id
, 'bar' AS foo
FROM mytable
WHERE ...
LIMIT ...
'bar'只是一个字符串文字,在查询的结果集中的每一行(在一个名为foo的列中)返回。
此外,MySQL允许我们在没有 FROM子句
的情况下运行查询SELECT 'fee' AS fum
我们还可以将子查询放在查询的SELECT列表中。例如:
SELECT t.id
, (SELECT r.id FROM resorts r ORDER BY r.id ASC LIMIT 1) AS id
FROM mytable
WHERE ...
LIMIT ...
您询问的查询模式是没有FROM子句的SELECT语句
返回的唯一表达式是子查询的结果。
例如:
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。