从一个表中删除不在另一个表中的行

时间:2016-06-09 16:01:00

标签: sql

我试图从TableA中删除一组行,如果它们不在TableB中,则基于一串ID。

Tables

我有一串ID,例如1,2,3,4,5。我想检查tableB,如果它们不存在,则删除tableA中的行。在这种情况下,将从表A中删除2和4。

2 个答案:

答案 0 :(得分:4)

使用子查询的简单方法是(语法取决于您特定的SQL品牌):

e.g。 Delete from TableA where ID not in (select ID from TableB)

答案 1 :(得分:0)

您的查询版本:

Delete from TableA
    where ID NOT IN (Select ID from TableB where iProspect IN ( @String );

不起作用。 IN列表由单个值组成,恰好是逗号分隔的值。在某些SQL引擎中,您甚至可能会收到转换错误。

您可以使用LIKE。确切的语法因数据库而异,但这是典型的语法:

Delete from TableA
    where ID NOT IN (Select ID
                     from TableB
                     where CONCAT(',', @String, ',') LIKE CONCAT('%,', iProspect, ',%') );

某些数据库可能有更好的替代方法来处理字符串。在任何数据库中,您都可以使用动态SQL生成语句。如果你知道id是真正的适当值列表,你可以直接将它们放入字符串中。使用适当的索引,IN应该比LIKE具有更好的性能。