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万的部门工作的经理的身份。很抱歉格式化的问题。
发布于 2017-01-19 12:23:44
不同之处在于ALL操作符。当ALL运算符与比较运算符一起使用时,请阅读here。
不同之处在于一个经理监督多个部门的情况。
如果你有一个管理这两个部门的经理:
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
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)第二个查询愉快地返回结果:
SELECT DISTINCT managerid FROM @dept WHERE budget > 1000000
managerid
-----------
1
(1 row(s) affected)UPDATE:要使这两个查询等价,可以使用ANY操作符:
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中的图片:

https://stackoverflow.com/questions/41733230
复制相似问题