我有一张表employees
,如下所示:
Id Name Manager_Id
1 ABC 4
2 DEF 20
3 GHI 30
4 JKL 40
以下查询不会返回任何结果。我期待它会回归" JKL"。我在这里缺少什么?
select e1.Name from Employees e1 where e1.id =
(select e2.manager_id from employees e2 where e2.id = e1.id);
答案 0 :(得分:4)
如果您从外部向下打破此查询,则您希望找到e1.id = e2.manager_id
以及e2.id = e1.id
所在的记录。换句话说,您要查询id = manager.id
的记录,而该记录根本就不存在。
我认为您尝试做的是在表格中选择id
作为manager_id
存在的所有记录。
使用in
运算符可以更简单地完成此操作:
SELECT name
FROM employees
WHERE id IN (SELECT manager_id FROM employees)
答案 1 :(得分:2)
使用in
,而不是=
:
select e1.Name from Employees e1 where e1.id IN
(select e2.manager_id from employees e2 where e2.id = e1.id);
=
运算符用于测试标量是否相同。 IN
测试设置成员资格。