当前位置: 首页 > 知识库问答 >
问题:

不使用IN子句高效删除T-SQL记录

劳仲渊
2023-03-14

在下面的场景中,有没有一种有效的方法可以在不使用关键字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)

如果您研究了这个场景,您将在括号内包含要从查询中删除的所有记录。

DELETE FROM IndexHistory IH 
LEFT JOIN IndexedLineItems I ON IH.Docid = I.DocId
WHERE I.Docid IS NULL

共有1个答案

孔鸿云
2023-03-14

使用不存在:

Delete ih from IndexHistory ih
    where not exists (select 1 from IndexedLineItems ili where ih.Docid = ili.DocId)
 类似资料:
  • 当我尝试执行删除时,将设置为

  • Where 子句用于在从表中获取数据或将其包含在其他表中时生成条件。如果满足条件,则它从表中返回一个特定值。我们使用 WHERE 子句来过滤数据库中的记录并获取主要记录。 在 SELECT 语句中使用了 WHERE 子句,但它也用于 UPDATE、DELETE 帐户等。 语法: 我们使用逻辑运算符生成条件,它们是:、、、、 等。 下面来看一个例子,已更换的理解: 示例 请参阅具有以下记录的 EMP

  • T-SQL中的DROP TABLE语句用于删除表定义,删除表的数据、索引、触发器、约束。 注意 - 需要小心使用这个命令,因为如果使用这个命令删除一个表,那么存储在表中的所有数据将永远丢失。 Drop-Table 的语法 语句的语法是- 例子: 首先验证表,然后从数据库中删除—— 上述命令输出结果如下 - CUSTOMERS 表在数据库中可用,所以让我们删除它。下面是命令: 执行上面的命令,没有收

  • ORDER BY 子句按递增或递减顺序对数据库进行排序。要一次对多个列进行排序,请使用运算符 (,) 运算符分隔列名称。 ORDER BY默认按升序对数据进行排序。 DESC关键字用于按降序对数据进行排序,ASC关键字用于按升序对数据库进行排序。 ORDER BY子句的语法 这里: :表的名称。 :数据库表的列名称。 : 使用 ASC 或 DESC 升序或降序排序 例子: 假设 CUSTOMERS

  • IN 子句 标识出外部数据库中的表,例如dBASE或Paradox数据库,或Microsoft Jet外部数据库,Microsoft Jet数据库引擎能够与之相连。 语法 标识目标表: [SELECT | INSERT] INTO destination IN {path | ["path" "type"] | ["" [type; DATABASE = path]]} 标识数据源表: FROM

  • 问题内容: 在此找到了两个类似的问题,但无法弄清楚如何应用于我的方案。 我的函数有一个名为 @IncludeBelow 的参数。值是0或1(BIT)。 我有这个查询: 如果@IncludeBelow为0,我需要查询如下: 如果@IncludeBelow为1,则最后一行需要排除。(即不应用过滤器)。 我猜想它必须是一条语句,但无法弄清楚语法。 这是我尝试过的: 显然,这是不正确的。 正确的语法是什么