Как удалить данные из таблицы, если идентификатор находится в столбце

Я должен написать сценарий, который будет извлекать идентификаторы всех участников, для которых электронная почта была сильно отклонена. Для этого я написал это

 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),

Другие вопросы по тегам