Проверить, существует ли дубликат в столбце и сделать что-то sql
У меня есть столбец адреса электронной почты в моей базе данных, я хочу проверить, есть ли дубликаты, выполнить TASK FAILURE PATH, и если есть только одна запись, выполнить TASK SUCCESS PATH.
DECLARE @DuplicateCount int=
(
SELECT COUNT(*)
FROM tblWebPortal_Login
WHERE Email = 'abe@abeprakash.com'
GROUP BY email
HAVING COUNT(email) > 1
);
select @DuplicateCount
if @DuplicateCount is null
TASK SUCCESS PATH
else
TASK FAILURE PATH
У меня проблема в том, что @DuplicateCount возвращает нуль, если есть только одна запись и если адрес электронной почты отсутствует. то есть ЗАДАЧА A выполняется для адреса электронной почты, который присутствует только один раз (что является правильным), однако ЗАДАЧА A выполняется, если в электронном письме содержатся некоторые данные для мусора (что неверно)
Я использую SQL Server 2016
2 ответа
Просто получите count()
, GROUP BY
пункт не является необходимым, если вы фильтруете только один адрес электронной почты. И HAVING
пункт порождает NULL
s.
DECLARE @DuplicateCount integer = (SELECT count(*)
FROM tblWebPortal_Login
WHERE Email = 'abe@abeprakash.com');
IF @DuplicateCount = 1
BEGIN
-- TASK SUCCESS PATH
END
ELSE
BEGIN
-- TASK FAILURE PATH
END;
Таким образом, путь успеха вводится только тогда, когда адрес электронной почты существует ровно один раз. Если он не существует вообще или несколько раз, вводится путь отказа.
Прежде всего, избегайте группового, а наличие этого не является необходимым в вашем обществе.
Второй не использовать счетчик (*) использовать счетчик (электронная почта)
DECLARE @DuplicateCount int=
(
SELECT COUNT(email)
FROM tblWebPortal_Login
WHERE Email = 'abe@abeprakash.com'
);
select @DuplicateCount
if @DuplicateCount is null
TASK SUCCESS PATH
else
TASK FAILURE PATH