从TableA中删除WhereB等于TableB

时间:2016-08-30 08:23:30

标签: c# .net sql-server

我有一个临时表,通过它我要删除Customers表中的所有匹配记录。在"语言术语":

delete 
   tableA.* 
from 
   table A,table B 
where 
    TableA.col1=TableB.col1 
    && TableA.colb=TableB.col2 /// and so forth

有关表格的一些信息:

  • 表之间没有关系。匹配记录的唯一真正方法是匹配所有列(我想清除任何重复项)
  • 两个表之间没有外键。从CSV导入临时表,数据将转换为在我们的系统中使用。
  • 大多数导入都是相同的(大约80%的暂存行要从大约6万条记录中删除)

我在Linq2SQL中使用它,但由于所有查询都需要更长的时间,因为每个查询都有大约80%的匹配记录,我觉得单个查询就足够了。

这在SQL中完全可以吗?

2 个答案:

答案 0 :(得分:3)

您可以使用JOIN与DELETE

DELETE a
FROM tableA a
INNER JOIN tableB b
  ON  a.Col1 = b.Col1
  AND a.ColB = b.ColB 
  ... and so on

或使用EXISTS

DELETE a
FROM tableA a
WHERE EXISTS
(
   SELECT 1 FROM tableB b
   WHERE a.Col1 = b.Col1
     AND a.ColB = b.ColB
     ....
)

答案 1 :(得分:0)

merge table1 t1
    using (
        select t2.ID
            from table2 t2
    ) as d
    on t1.ID = d.ID
    when matched then delete;