gpt4 book ai didi

mysql - 为什么将子查询从 FROM 移动到 SELECT 会导致 NULL?

转载 作者:行者123 更新时间:2023-12-03 23:02:35 25 4
gpt4 key购买 nike

我试图了解 MySQL 中与 NULL 相关的行为。当我在 LeetCode 上尝试解决以下问题时出现了这种行为:

Write a SQL query to get the second highest salary from the Employeetable.

+----+--------+
| Id | Salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+

For example, given the above Employee table, the query should return200 as the second highest salary. If there is no second highestsalary, then the query should return null.

+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+

我是 SQL 的新手,并且仍在学习使用 NULL 值的来龙去脉。我尝试了以下查询,看看在没有第二高薪水时它是否会返回 NULL:

SELECT e.Salary as SecondHighestSalary
FROM (
SELECT DISTINCT Salary from Employee ORDER BY Salary DESC LIMIT 1, 1
) as e

如果没有 Second Highest Salary,此查询将不返回任何内容。 (我认为这没什么;无论如何,它不会返回 NULL 或空字符串。)

我最终想出了一个更复杂的查询来回答这个问题。但是,在查看讨论部分以与其他人的解决方案进行比较时,我发现了这一点:

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

( Fiddle .)

与我的第一次尝试不同,在 SecondHighestSalary 不存在的情况下,此查询确实返回 NULL!

有谁知道为什么将相同的子查询从 FROM 子句移动到 SELECT 会改变这种情况下的返回行为?

最佳答案

在第二个查询中,您有一个返回 SELECT 中的值的子查询。这称为标量子查询

通常,标量子查询可以只返回一列和零行或一行——否则会出现错误(在某些数据库的某些上下文中,允许多列,但这与此处无关)。

总的来说,没有fromselect 无论如何都只返回一行。不返回任何行的标量子查询在外部查询中被视为 NULL 值。这就是为什么您得到一行 NULL,而不是零行。

关于mysql - 为什么将子查询从 FROM 移动到 SELECT 会导致 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64671184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com