Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么只选择一个select语法就可以保存null?_Mysql_Select - Fatal编程技术网

Mysql 为什么只选择一个select语法就可以保存null?

Mysql 为什么只选择一个select语法就可以保存null?,mysql,select,Mysql,Select,这是Leetcode的一个问题: 我不理解这种方法,为什么它能克服这个问题 我想知道内部机制。第一个查询的问题是,如果表中有1行(或更少),它将不返回任何行 看起来他们认为一个空结果集不是这个情况下的正确答案。相反,他们总是希望结果中有一行包含null值(表示表中没有第n个薪资) 这就是第二个查询所做的。它选择初始查询的(标量)结果,因此它总是生成一行。如果子查询返回某个值,则得到该值,否则得到null 考虑这个简单的例子: select 1 where 0 = 1

这是Leetcode的一个问题:

我不理解这种方法,为什么它能克服这个问题


我想知道内部机制。

第一个查询的问题是,如果表中有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语法做了什么?哇,我明白了!非常感谢你!