我试图从TableA中删除一组行,如果它们不在TableB中,则基于一串ID。
我有一串ID,例如1,2,3,4,5。我想检查tableB,如果它们不存在,则删除tableA中的行。在这种情况下,将从表A中删除2和4。
答案 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
具有更好的性能。