在以下场景中,是否有一种有效的方法可以在不使用关键字 IN
的情况下从 SQL Server 中删除记录:
-- If Documents were deleted, remove them from your ocean
DELETE FROM IndexHistory
WHERE DocId IN (SELECT IH.Docid
FROM IndexHistory IH
LEFT JOIN IndexedLineItems I ON IH.Docid = I.DocId
WHERE I.Docid IS NULL)
如果您研究这种情况,您将在括号内从查询中删除所有记录。
事实证明,使用“IN”是低效的。因此,人们会认为应该有一种方法可以在不使用“IN”的情况下删除这些记录,因为您的所有记录都可以在不使用“IN”的情况下进行识别。
因此,例如,我认为这样的事情可能是可能的,但我没有正确的语法:
DELETE FROM IndexHistory IH
LEFT JOIN IndexedLineItems I ON IH.Docid = I.DocId
WHERE I.Docid IS NULL
我很欣赏答案可能仍然是“不,这是不可能的”。
如果不可能,也许可以作为改进 Microsoft 语言的建议。在我这样做之前,我想我会在这里发帖看看我是否遗漏了什么。
最佳答案
使用 not exists
:
Delete ih from IndexHistory ih
where not exists (select 1 from IndexedLineItems ili where ih.Docid = ili.DocId)
关于sql-server - 使用 T-SQL 高效删除记录而不使用 IN 子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52724731/