2015-04-20 40 views
0

有表像这样SQLite的:删除表中的另一个表中规定的所有记录

mytab  deltab 
--------- -------- 
id | name id | name 
1 | Ann  2 | Bob 
2 | Bob  3 | Cindy 
3 | Cindy 
4 | Dave 

我想执行的查询其删除MYTABdeltab指定的所有记录,所以只有安和戴夫将留在我的选项卡中。

虽然有MySQL multiple-table delete syntax,看起来好像SQLite delete syntax没有这样的东西。

我正在考虑使用select-stmt替换语法,并在DELETE查询之后标记将被删除的行(如将这些名称设置为NULL)。我想知道是否有更有效的方法?

回答

1

试试这个:

DELETE FROM mytab  
WHERE EXISTS (SELECT * 
       FROM deltab 
       WHERE deltab.ID = mytab.ID) 
+0

嗯...一个子查询,我很少使用它们,如何对他们在SQLite的速度是多少?与Lokesh的建议有什么不同吗? –

+0

@JanTuroň: - 我不认为你会面临任何性能差异。我宁愿在IN中使用EXISTS。由于'in'最适合在有静态列表的地方通过。 EXISTS会告诉你一个查询是否返回任何结果 –

+0

@JanTuroň: - 同样就速度而言,我发现EXISTS比IN快得多(当子查询结果非常大时) –

3

尝试此查询

Delete from mytab where id in (select id from deltab); 
相关问题