gpt4 book ai didi

sql - value >= all(select v2 ...) 与 value = (select max(v2) ...) 产生不同的结果

转载 作者:行者123 更新时间:2023-12-04 15:12:30 25 4
gpt4 key购买 nike

Here我问了关于不工作查询的问题。

偶然地(在一个答案的帮助下)我找到了如何使解决方案正确。问题是我不明白为什么它们会产生不同的结果。

因此,数据库具有以下架构:

enter image description here

我正在搜索来自 PC 的所有模型, PrinterLaptop最高价钱。所有这些表可能具有非唯一性 model列,作为具有不同 code 的项目可能有相同的型号。

我原来的解决方案是:

with model_price(model,price) as (
select model,price
from PC

union

select model,price
from Laptop

union

select model,price
from Printer
)

select model
from model_price
where price >= all(select price from model_price)

它给出了错误的结果 - 系统返回 * Wrong number of records (less by 2) .

正确的解决方案是这样的:
with model_price(model,price) as (
select model,price
from PC

union

select model,price
from Laptop

union

select model,price
from Printer
)

select model
from model_price
where price = (select max(price) from model_price)

那么,为什么解决方案是 all产生不同的结果?

关于sql引擎: Now we use Microsoft SQL Server 2012 on the rating stages, and MySQL 5.5.11, PostgreSQL 9.0, and Oracle Database 11g on the learn stage in addition.
所以我不知道他们究竟使用哪个引擎来评估这个练习。

最佳答案

create table t (f int null);

select 1 where 1 >= (select max(f) from t); -- 1
select 1 where 1 >= all(select f from t); -- 2

insert into t values (null), (0);

select 1 where 1 >= (select max(f) from t); -- 3
select 1 where 1 >= all(select f from t); -- 4

http://www.sqlfiddle.com/#!6/3d1b1/1

第一个 select什么都不返回,第二个 select返回 1 .
MAX返回一个标量值。如果不存在行, MAX返回 NULL . 1 >= NULL在第 1 行不是真的。另一方面, 1 >= all f s 是真的,因为没有 f s 条件不成立。

第三个 select返回 1 ,第四个 select什么都不返回。
MAX与所有聚合函数一样,忽略 NULL s。 MAX(f)第 3 行为 0,并且 1 >= 0是真的。 ALL没有:它评估 1 >= NULL AND 1 >= 0在第 4 行,这是不正确的。

关于sql - value >= all(select v2 ...) 与 value = (select max(v2) ...) 产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17028334/

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