【发布时间】:2018-08-14 14:59:18
【问题描述】:
我稍微修改了我的问题以使其更清楚。
我发现了一个奇怪的select 语法here。这是this problem 的解决方案。有趣的代码是
SELECT
(SELECT DISTINCT
Salary
FROM
Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1) AS SecondHighestSalary
;
select 后跟一个子查询。通常select 后面应该跟column 名称,如here 所示。
为了更好地理解 select 的用法,我在 Chrome 中测试了此处给出的示例:https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all。原始的SQL 语句是SELECT customerId FROM Customers。
它返回91 行。
我给它添加了一个外部select:select (SELECT customerId FROM Customers);
它只返回一行:第一行。
我不明白为什么它只检索一行而不是所有customerId。
谁能解释一下?谢谢
【问题讨论】:
-
limit 1 返回单行
-
LIMIT 1 OFFSET 1- 跳过第一行 (OFFSET 1),返回 1 行 (LIMIT 1) -
我能理解上面有趣的代码,以及
limit和offset的意思,但是我不能理解
1.为什么select后面是table而不是@ 987654344@ 名称,因为子查询应该返回一个表。
2.为什么我在Chrome中测试的例子中select只选择了第一个row。 -
在这种情况下,超级查询什么都不做。
-
它做了一些事情。如果您删除外部
select,则所有customerId都会被检索到。共有91customerIds