【发布时间】:2019-03-14 10:48:56
【问题描述】:
在以下场景中,是否有一种有效的方法可以在不使用关键字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 改进语言。在我这样做之前,我想我会在这里发帖看看我是否遗漏了什么。
【问题讨论】:
-
马克,不完全是,但它是相关的并且是一个很好的发现,并且有助于我发布一个额外的可能答案(我的不是内连接,而是左连接)。底部的一些答案似乎也不错。
标签: sql-server tsql syntax subquery