Как удалить данные из таблицы, если идентификатор находится в столбце
Я должен написать сценарий, который будет извлекать идентификаторы всех участников, для которых электронная почта была сильно отклонена. Для этого я написал это
Select id FROM Members m
Join tbl_memberlanguageid mli on m.ID = mli.MLI_MemberID
Where Cast(dateCreated as date) >= '01-Dec-2014'
and mli.MLI_LanguageID = 3
and EmailHardBounces = 1
Тогда мне нужно использовать этот список идентификаторов, чтобы удалить их из таблицы Members. Как я могу написать этот сценарий, чтобы он удалял все, что связано с идентификатором, из участников, если идентификатор находится в этом списке?
3 ответа
По-другому:
DELETE FROM Members WHERE ID IN(Select id FROM Members m
Join tbl_memberlanguageid mli on m.ID = mli.MLI_MemberID
Where Cast(dateCreated as date) >= '01-Dec-2014'
and mli.MLI_LanguageID = 3
and EmailHardBounces = 1)
Вы можете просто изменить Select id
в Delete m
:
BEGIN TRAN
DELETE m
FROM Members m
JOIN tbl_memberlanguageid mli ON m.ID = mli.MLI_MemberID
WHERE CAST(dateCreated AS DATE) >= '01-Dec-2014'
AND mli.MLI_LanguageID = 3
AND EmailHardBounces = 1
ROLLBACK
COMMIT
Просто подтвердите правильность количества записей перед тем, как удалять.
Мне нравятся CTE, так как они позволяют увидеть, что я собираюсь удалить:
WITH MemberIdsToDelete AS
(
Select id FROM Members m
Join tbl_memberlanguageid mli on m.ID = mli.MLI_MemberID
Where Cast(dateCreated as date) >= '01-Dec-2014'
and mli.MLI_LanguageID = 3
and EmailHardBounces = 1
)
SELECT id FROM MemberIdsToDelete
Если вы, наконец, хотите удалить их, замените
SELECT id FROM MemberIdsToDelete
с
DELETE FROM Members WHERE id IN (SELECT id FROM MemberIdsToDelete)
,