База данных Northwind | SQL-запрос, который возвращает сотрудников и тех, кому они подчиняются

Я пытаюсь написать запрос к базе данных Northwind, в котором перечислены сотрудники и имена их руководителей, не включая сотрудников, которым не к кому отчитаться.

Вот что у меня есть на данный момент:

SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees 
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID 
WHERE employees.reportsto <> null;

Этот запрос выполняется, но ничего не появляется.


person Help pls    schedule 17.04.2017    source источник
comment
Извините за то, что вы неоднократно проверяли и снимали флажки с кнопок ответа! Я думал, что могу выбрать более одного ответа. ????   -  person Help pls    schedule 17.04.2017
comment
Сегодняшний совет: объявите псевдонимы таблиц для обоих экземпляров сотрудников, чтобы сделать код более понятным.   -  person jarlh    schedule 17.04.2017


Ответы (3)


Ты должен попытаться:

SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees 
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID 
WHERE employees.reportsto IS NOT NULL --or "<> NULL" when ANSI_NULLS is set to OFF ("!=" is specific to SQL server)

Если вы используете sql server, по умолчанию set ANSI_NULLS ВКЛ, вам нужно использовать IS/IS NOT для сравнения с NULL

person LONG    schedule 17.04.2017
comment
Речь идет о без включения сотрудников, которым не к кому подчиняться, поэтому оно должно быть НЕ ПУСТО (IS NOT NULL) - person Randi Ratnayake; 17.04.2017
comment
@RandikaRatnayake, у меня плохое зрение - person LONG; 17.04.2017

Я понял, никогда не пытался сравнить значение с нулем. Правильный ответ:

WHERE employeesAM.reportsto **is not** null;
person Help pls    schedule 17.04.2017
comment
вы можете использовать = или <> (!=) для сравнения с NULL, только если вы установите для параметра запроса SET ANSI_NULLS значение OFF - person LONG; 17.04.2017

Попробуйте IS NOT NULL:

SELECT employees.firstname, employees.lastname, superior.firstname, superior.lastname
FROM employees 
LEFT OUTER JOIN employees superior ON employees.reportsto = superior.employeeID 
WHERE employees.reportsto IS NOT NULL;

Объяснение: NULL не имеет значения, поэтому его нельзя сравнивать с помощью операторов скалярного значения. https://stackoverflow.com/a/5658472/684030

person Randi Ratnayake    schedule 17.04.2017
comment
Удовольствие. Отметьте как ответ, если это вам поможет :) - person Randi Ratnayake; 17.04.2017
comment
Извините! Другой человек опередил вас на 4 минуты, но я очень благодарен за помощь! Если бы я мог выбрать несколько ответов, я бы определенно сделал это, но еще раз спасибо! :) - person Help pls; 17.04.2017