Как опустить некоторые конкретные данные при использовании самостоятельного соединения - PullRequest
0 голосов
/ 05 января 2019
from employee e 
join employee e1 on e.dept = e1.dept
where e.id <> e1.id and e1.ename = 'Jack Abraham'

Это мой конкретный код для SQL, он работает нормально. Я не могу понять, почему мы используем name = 'Jack Abraham' в конкретном коде, когда я хочу, чтобы сотрудник не был 'Jack Abraham'. Пожалуйста, очистите мои сомнения

1 Ответ

0 голосов
/ 05 января 2019

Идея вашего SQL-запроса такова:

  1. Получить все записи с ename = Jack Abraham ( e1 )
  2. Затем самостоятельно присоединяйтесь, чтобы получить сотрудников, которые находятся в одном отделе с Jack Abraham, но не Jack Abraham ( e : то же самое dept, но отличаются id).

Так что этот запрос предназначен не только для получения сотрудников, чьи имена не Jack Abraham, как вы думали.

Это чтобы получить всех сотрудников, чьи имена не Jack Abraham, но в их отделе есть кто-то по имени Jack Abraham.

Но даже это неправильный запрос, если в одном отделе работают 2 человека с одинаковыми именами Jack Abraham. Должно быть:

FROM employee e 
JOIN employee e1 ON e.dept = e1.dept
WHERE e1.ename = 'Jack Abraham' 
    AND e.ename <> 'Jack Abraham' -- e.ename <> e1.ename;

Так что вы можете попробовать спросить того, кто пишет этот запрос, об истинной цели этого. Или вы можете попросить своего БА получить требование и переписать запрос.

...