Joh*_*ohn 0 sql t-sql sql-server
我有以下表结构:
我想从Users表中删除SomeItems和SomeOtherItems表中不存在的记录。
我可以做这个:
DELETE from Users
FROM Users u
WHERE u.UserId NOT IN
(SELECT DISTINCT SomeId FROM SomeItems
UNION
SELECT DISTINCT SomeId2 FROM SomeOtherItems)
Run Code Online (Sandbox Code Playgroud)
但是,它非常慢。我假设它为每条记录执行UNION查询,不是吗?有什么办法可以提高性能?
在两个结果上应用distinct,然后将它们合并(这适用于第三个distinct,所有这些都需要排序),并不是验证存在的最有效方法。怎么样:
DELETE u
FROM dbo.Users AS u -- always use schema prefix!
WHERE NOT EXISTS
(
SELECT 1 FROM dbo.SomeItems WHERE SomeId = u.UserId
)
AND NOT EXISTS
(
SELECT 1 FROM dbo.SomeOtherItems WHERE SomeID2 = u.UserId
);
Run Code Online (Sandbox Code Playgroud)