1

有一个名为 Employee 的表,上面有employee_id、manager_id、salary 列。我的查询是

select employee_id,salary,last_name from employees M
WHERE EXISTS 
(SELECT employee_id FROM employees W
WHERE (W.manager_id = M.employee_id) AND W.SALARY>10000)
order by employee_id asc

这个查询是什么意思?

a)所有薪水大于10000的经理

b) 至少有一名员工收入超过 10000 的所有经理

4

4 回答 4

2

如果子查询返回任何行,EXISTS则子查询为TRUENOT EXISTS子查询为FALSE。例如:

SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

传统上,EXISTS子查询以 开头SELECT *,但它可以以SELECT 5orSELECT column1或任何内容开头。MySQL会忽略SELECT此类子查询中的列表,因此没有区别。

在您的情况下,选项B是正确的。

于 2013-05-14T12:20:53.877 回答
0

这似乎意味着所有至少一名员工收入超过 10000 的经理。如果没有看到实际的表格等,很难说。

这样想:

员工 W 的 manager_id = 员工 M 的employee_id,就是 W 怎么赚超过 10000。

所以,M 是经理,W 是员工,W 收入超过 10000

于 2013-05-14T12:22:51.680 回答
0

b) 它说:给我所有 M(anagers),他们有(至少一个)W(orker)(在他们之下),薪水大于 10k。

于 2013-05-14T12:23:18.510 回答
0

我想知道 stackoverflow 中提出的问题类型。

所以在这里我打破你的查询

SELECT employee_id FROM employees W
WHERE (W.manager_id = M.employee_id) AND W.SALARY>10000

上面的查询是在你的employees表中搜索薪水超过10000的经理

之后,您有查询select employee_id,salary,last_name from employees M以获取您的员工以及在先前的选择查询中满足工资标准的经理。

简而言之,您将获得收入超过 10000 的经理详细信息

于 2013-05-14T12:24:09.240 回答