我有两个表都有一个ID号,它们被链接在一起(AllUsers
和AllProfiles
)。当用户按下按钮时,我希望AllUsers
表检查AllProfiles
表中不存在的ID并删除它们。我是SQLCE的新手并且一起攻击了这个。问题是,它不断删除整个表。为什么呢?
DELETE FROM AllUsers
WHERE EXISTS
(SELECT ID
FROM AllUsers
WHERE (ID NOT IN
(SELECT ID
FROM AllProfiles)))
此外,这是批量删除数千条记录的有效方法吗?我尝试了Linq的DeleteAllOnSubmit,但它太慢了。我希望由于以上是直接比较两个表,它应该是有效的。 (我不想使用级联,因为我需要单独控制每个表)
编辑 - SELECT
语句正确返回缺少的ID,因此DELETE FROM AllUsers WHERE EXISTS
部分出现问题。
答案 0 :(得分:1)
你基本上是在说
delete from allusers
where TRUE -- this is pseudo, but you get the idea
您的原始查询会删除整个表,因为唯一的条件是布尔值...如果返回数据,那么它将删除所有数据。如果您的exists
子句不返回数据,则不会删除任何数据。
你想要这样的东西(我不熟悉CE,但如果不能100%转移到CE,你应该能够做一个小修改):
delete from allusers
where id not in
(
select id
from allprofiles
)