首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这两个简单的SQL查询有什么不同?

这两个简单的SQL查询有什么不同?
EN

Stack Overflow用户
提问于 2017-01-19 11:32:05
回答 1查看 65关注 0票数 0
代码语言:javascript
运行
复制
Emp(eid: integer, ename: string, age: integer, salary: real)

Works(eid: integer, did: integer, pct time: integer)

Dept(did: integer, dname: string, budget: real, managerid: integer)
SELECT DISTINCT D.managerid

FROM Dept D

WHERE 1000000 < ALL (SELECT D2.budget
 FROM Dept D2
 WHERE D2.managerid = D.managerid )


other one:
SELECT DISTINCT managerid FROM dept WHERE dept.budget > 1000000

他们都获得了在预算超过100万的部门工作的经理的身份。很抱歉格式化的问题。

EN

回答 1

Stack Overflow用户

发布于 2017-01-19 12:23:44

不同之处在于ALL操作符。当ALL运算符与比较运算符一起使用时,请阅读here

不同之处在于一个经理监督多个部门的情况。

如果你有一个管理这两个部门的经理:

代码语言:javascript
运行
复制
declare @Dept table (did integer, dname varchar(20), budget real, managerid integer)
insert into @Dept values(1, 'dept1', 10, 1),(2, 'dept2', 20000000, 1)

那么第一个查询将不会给出任何结果,因为拥有managerid=1的经理有一个部门的预算超过或小于1000000

代码语言:javascript
运行
复制
SELECT DISTINCT D.managerid
FROM @Dept D
WHERE 1000000 < ALL (SELECT D2.budget
 FROM @Dept D2
 WHERE D2.managerid = D.managerid )

managerid
-----------
(0 row(s) affected)

第二个查询愉快地返回结果:

代码语言:javascript
运行
复制
SELECT DISTINCT managerid FROM @dept WHERE budget > 1000000

managerid
-----------
1
(1 row(s) affected)

UPDATE:要使这两个查询等价,可以使用ANY操作符:

代码语言:javascript
运行
复制
SELECT DISTINCT D.managerid
FROM @Dept D
WHERE 1000000 < ANY (SELECT D2.budget
 FROM @Dept D2
 WHERE D2.managerid = D.managerid )
managerid
-----------
1
(1 row(s) affected)

为了完整起见,我在这里添加了上面URL中的图片:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41733230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档