Подзапрос, не исключающий элементы из основного запроса - PullRequest
0 голосов
/ 25 марта 2020

У меня следующий запрос SQL, чтобы исключить сотрудников из отдела 'Post Closing'. Но я все еще собираю людей в отделе после закрытия. not exists, похоже, не работает.

select concat(ltrim(rtrim(FirstName)), ' ',ltrim(rtrim(LastName))) Employee
from employeelist t1
where Department_Desc like  '%Closing' or Department_Desc like '%Funding' 
and (Position like 'A1%' or position like 'A2%')
and not exists(select concat(ltrim(rtrim(FirstName)), ' ',ltrim(rtrim(LastName))) Employee
               from employeelist t2 
               where  t1.Employee_Code = t2.Employee_Code
               and t2.Department_Desc in ('Post Closing' ))

Любая помощь в решении этой проблемы будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 25 марта 2020

Ваша проблема в скобках. Я бы порекомендовал вам написать запрос следующим образом:

where (Department_Desc like '%Closing' or
       Department_Desc like '%Funding' 
      ) and
     Position like 'A[12]%' and
     not exists (select 1
                 from employeelist t2 
                 where t1.Employee_Code = t2.Employee_Code and
                       t2.Department_Desc in ('Post Closing' )
                )

Помимо исправления скобок, есть два изменения:

  1. При этом используется поддержка SQL Серверы (ограничено ) классы символов в шаблонах LIKE для упрощения сравнения для Position.
  2. select для exists упрощается до "1". Exists только проверяет, возвращена ли строка; значение не имеет значения.
1 голос
/ 25 марта 2020

Из-за приоритета оператора вы получаете все строки, в которых

department_desc LIKE '%Closing'

или

department_desc LIKE '%Funding'
AND ... -- the rest of the WHERE clause

А так как 'Post Closing' похоже на '%Closing' записи с 'Post Closing' находятся в результат.

Похоже, вы хотите

WHERE (department_desc LIKE '%Closing'
       OR department_desc LIKE '%Funding')
      AND ...

, т.е. пусть OR в выражении в описании департамента имеет приоритет над следующим AND.

0 голосов
/ 25 марта 2020

Пожалуйста, попробуйте с escape-символом.

and t2.Department_Desc LIKE ('%Post_Closing%' ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...