В моей хранимой процедуре у меня есть временная таблица, в которой есть данные, как показано ниже:

enter image description here

Я получаю 2 строки для некоторых сотрудников, одна из которых имеет имя emp, а другая - null.

Теперь мне нужно удалить строку для сотрудника, если у нее есть повторяющиеся строки с нулевым именем emp.

Нам не нужно удалять, если это единственная строка с нулем. Мне просто нужно удалить выделенные.

Пожалуйста, помогите, какое здесь условие

enter image description here

0
vissubabu 5 Дек 2020 в 21:03

2 ответа

Лучший ответ

Вы можете проверить имя с помощью оператора is null и задать другое условие exists для проверки соответствующего идентификатора с ненулевым именем:

DELETE a
FROM   mytable a
WHERE  emp_name IS NULL AND
       EXISTS (SELECT *
               FROM   mytable b
               WHERE  b.emp_name IS NOT NULL AND a.emp_id = b.emp_id)
1
Mureinik 5 Дек 2020 в 18:43

В SQL Server синтаксис DELETE с FROM немного отличается. Попробуйте одно из этих:

delete @Results
from @Results r
where
    r.AffectedEndUserName is null
    and exists  (
                    select
                        1
                    from @Results rr
                    where
                        rr.AffectedEndUserName is not null and rr.EmpId = r.EmpId
                );

delete r
from @Results r
    inner join @Results rr on rr.EmpId = r.EmpId and rr.AffectedEndUserName is not null
where
    r.AffectedEndUserName is null;

Я бы предпочел последнее; намного чище.

0
Hasan Manzak 5 Дек 2020 в 18:39