#tsql
#tsql
Вопрос:
SELECT a.samAccountName
FROM activeIds AS a
WHERE NOT EXISTS (SELECT *
FROM #tmp1 AS b
WHERE a.samAccountName = b.userID)
AND a.samAccountName LIKE 'ysp%'
ORDER BY a.samAccountName ASC;
GO
Я создал временную таблицу, которая заполняет идентификаторы пользователей от YSP0000 до YSP9999.
У меня есть существующая таблица (activeIds), которая уже заполнена идентификаторами YSP.
Я пытаюсь вывести идентификаторы YSP, которые УЖЕ НЕ существуют в существующей таблице (activeIds).
По какой-то причине идентификаторы YSP не отображаются, а вместо них отображаются другие идентификаторы (например, ZSP).
Есть ли способ заставить идентификаторы отображаться?
Комментарии:
1. Не понимаю, как
zsp
это может появиться здесь. ВыWHERE ... LIKE 'ysp%'
должны это предотвратить. Пожалуйста, предоставьте некоторые примеры данных, которые воспроизводят проблему.2. Я просто решил переключить таблицу в коде (например, switch #tmp1 и sAMAccountName во всех местах, то же самое со столбцами), и в нем отображаются все неиспользуемые идентификаторы. Спасибо за помощь!
Ответ №1:
Я считаю, что то, что вы ищете, не NOT EXISTS
так, но NOT IN
. Что-то вроде этого:
select samAccountName
from activeIds
where samAccountId not in
(
select badAccountIds
from #temp1
)
Это позволит выбрать все имена учетных записей, идентификаторы которых отсутствуют во временной таблице.
Ответ №2:
Вы можете выполнить то же самое с помощью a left outer join
.
select a.samAccountName
from activeIds a
left outer join #tmp1 b on a.samAccountName = b.userID
where b.userID is null -- don't exist in #tmp1
and a.samAccountName like 'ysp%'
order by a.samAccountName