Mysql 为什么只选择一个select语法就可以保存null?
这是Leetcode的一个问题: 我不理解这种方法,为什么它能克服这个问题Mysql 为什么只选择一个select语法就可以保存null?,mysql,select,Mysql,Select,这是Leetcode的一个问题: 我不理解这种方法,为什么它能克服这个问题 我想知道内部机制。第一个查询的问题是,如果表中有1行(或更少),它将不返回任何行 看起来他们认为一个空结果集不是这个情况下的正确答案。相反,他们总是希望结果中有一行包含null值(表示表中没有第n个薪资) 这就是第二个查询所做的。它选择初始查询的(标量)结果,因此它总是生成一行。如果子查询返回某个值,则得到该值,否则得到null 考虑这个简单的例子: select 1 where 0 = 1
我想知道内部机制。第一个查询的问题是,如果表中有1行(或更少),它将不返回任何行 <>看起来他们认为一个空结果集不是这个情况下的正确答案。相反,他们总是希望结果中有一行包含
null
值(表示表中没有第n个薪资)
这就是第二个查询所做的。它选择初始查询的(标量)结果,因此它总是生成一行。如果子查询返回某个值,则得到该值,否则得到null
考虑这个简单的例子:
select 1 where 0 = 1 -- returns no rows
select (select 1 where 0 = 1) -- returns one row with a "null" value
此查询:
SELECT DISTINCT Salary AS SecondHighestSalary -- (DISTINCT is really not needed)
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
如果表只有一行,则不返回null
它不返回任何内容(无行)。
但当它作为派生列放置在另一个查询中时:
SELECT
(
SELECT DISTINCT Salary
FROM Employee
ORDER BY Salary DESC
LIMIT 1 OFFSET 1
) AS SecondHighestSalary
该列返回的值将是
null
,因为查询中的每一列都包含一个值或null
,其含义为未知或缺失。我仍然不明白为什么不能直接使用第一种方法。select对“()”中的select语法做了什么?哇,我明白了!非常感谢你!