Почему этот запрос не показывает сотрудников, которые не являются менеджерами, работает?

#mysql

Вопрос:

Написал этот запрос MySQL, чтобы показать всех сотрудников, которые не являются менеджерами:

 SELECT empno FROM emp WHERE empno NOT IN (SELECT mgr FROM emp);   

но это не дает никаких результатов. В чем может быть проблема? Это тот самый стол.

 CREATE TABLE emp (  empno int NOT NULL default 0000,  ename char(10) default NULL,  job char(9) default NULL,  mgr int default NULL,  hiredate datetime default NULL,  sal double default NULL,  comm double default NULL,  deptno int default NULL,  PRIMARY KEY (empno) );  

Комментарии:

1. у вас ничего нет, потому что empno не равно mgr

2. что это значит?

Ответ №1:

 SELECT empno FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL) ;  

Комментарии:

1. почему это решило проблему?

2. Прямое сравнение числа AFAIK с нулем не будет работать «правильно», поэтому лучше избегать таких сравнений.

3. Вы можете попробовать что-то вроде этого, например «ВЫБЕРИТЕ * из emp, где empno НЕ В (NULL);». Это не сработает.