2014-12-16 2 views
1

У меня есть таблица 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); 

ответ

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) 
+0

Спасибо, Мурейник. Это объяснение помогло. –

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 набор тестов.

+0

Использование IN-прежнему не работает. В OR = не вызывает никакой ошибки, но не возвращает никакого результата. –

Смежные вопросы