В моей хранимой процедуре у меня есть временная таблица, в которой есть данные, как показано ниже:
Я получаю 2 строки для некоторых сотрудников, одна из которых имеет имя emp, а другая - null.
Теперь мне нужно удалить строку для сотрудника, если у нее есть повторяющиеся строки с нулевым именем emp.
Нам не нужно удалять, если это единственная строка с нулем. Мне просто нужно удалить выделенные.
Пожалуйста, помогите, какое здесь условие
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)
В 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;
Я бы предпочел последнее; намного чище.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.