что не так с моим вложенным подзапросом и функцией substr - PullRequest
0 голосов
/ 13 октября 2019

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

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

У меня есть две таблицы:

  • EMP (NOEMP, NAME, FIRST, NAME, EMPLOI, SUP, HIRING, SAL, COMM, NOSERV)
  • SERV (NOSERVCITY SERVICE)

После анализа двух таблиц я могу узнать, не работает ли сотрудник в том же городе, что и его начальник, извлекая вторую цифру столбца SUP.

И здесь вы можете прочитать мое предложение, чтобы решить вопрос.

select e1.nom, e1.prenom, e1.emploi, s1.ville, substr(sup,2,1), e1.noserv`
from emp e1 join
     serv s1
     on e1.noserv = s1.noserv
where e1.nom  in (select distinct e3.nom
                   from emp e3 join
                        emp e4
                        on e3.noserv = e4.noserv
                   where substr(e3.sup,2,1) != e4.noserv
                  );

Все работает хорошо, но у меня неожиданный вывод, как вы можете видеть на этом экране с моего ноутбука.

вывод запроса


Вот образец данных:

1 Ответ

0 голосов
/ 13 октября 2019

В этом ответе делаются следующие предположения:

  • sup - это empno руководителя
  • noserv представляет "услугу"

Второе предположение означает, что вам не нужна таблица serv. Достаточно использовать join и неравенство на noserv:

select e.*
from emp e join
     emp m
     on m.sup = e.empno and m.noserv <> e.noserv;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...