2016-06-09 48 views
-2

我想从TableA中删除一组行,如果它们不在基于ID的字符串的TableB中。从一个表中删除行而不是在另一个表中

Tables

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

+0

这是最好的,如果你显示你已经尝试过的sql代码。 –

+0

这是我试过的。不幸的是,它首次在QA中删除了我的整个表格。我也尝试使用删除表A 其中ID NOT IN(从TableB中选择ID,其中iProspect IN(字符串) – user6446340

+0

用您正在使用的数据库标记您的问题 –

回答

4

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

例如Delete from TableA where ID not in (select ID from TableB)

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 s确实是适当值的列表,则可以直接将它们放入字符串中。使用适当的索引,IN应该比LIKE有更好的性能。

相关问题