DELETE FROM

适用于:勾选标记为“是” Databricks SQL 打勾标记 Databricks Runtime

删除与谓词匹配的行。 如果未提供谓词,则删除所有行。

只有 Delta Lake 表支持此语句。

语法

[ common_table_expression ]
    DELETE FROM table_name [table_alias] [WHERE predicate]

参数

  • 公用表表达式

    公用表表达式 (CTE) 是一个或多个命名查询,可在主查询块内重复使用多次,以避免重复计算或提高复杂嵌套查询的可读性。

  • table_name

    标识现有表。 名称不得包含时态规范

    table_name 不得为外部表。

  • table_alias

    定义该表的别名。 该别名不得包含列名列表。

  • WHERE

    按谓词筛选行。

    WHERE 谓词支持子查询,包括 INNOT INEXISTSNOT EXISTS 和标量子查询。 不支持以下类型的子查询:

    • 嵌套子查询,即一个子查询内的另一个子查询
    • NOT IN 中的 OR 子查询,例如 a = 3 OR b NOT IN (SELECT c from t)

    在大多数情况下,可以使用 NOT IN 重写 NOT EXISTS 子查询。 建议尽可能使用 NOT EXISTS,因为执行带有 DELETE 子查询的 NOT IN 可能会速度较慢。

示例

> DELETE FROM events WHERE date < '2017-01-01'

> DELETE FROM all_events
   WHERE session_time < (SELECT min(session_time) FROM good_events)

> DELETE FROM orders AS t1
   WHERE EXISTS (SELECT oid FROM returned_orders WHERE t1.oid = oid)

> DELETE FROM events
   WHERE category NOT IN (SELECT category FROM events2 WHERE date > '2001-01-01')