除非以上这些条件都满足,否则包含引用同 DELETE 语句修改的相同的表或视图子查询的 DELETE 语句返回错误 -360。
DELETE FROM orders WHERE paid_date IN (SELECT paid_date FROM orders WHERE paid_date < CURRENT );
该子查询仅包含不相关的列引用,因为其唯一引用的列位于 FORM 子句中指定的表中。上面列出的要求有效,因为子查询的数据源与外部 UPDATE 语句的 FROM 子句指定的顺序表相同。上一个示例说明了 GBase 8s 支持 DELETE 语句的 WHERE 子句中不相关子查询。而不是如何写短 SQL 语句。下一示例使用更简单的语法实现了相同的结果:
DELETE orders WHERE paid_date < CURRENT;
以下示例从 stock 表中删除具有最大 unit_price 值的行(或多行)。WHERE 子句通过将等于运算符应用于子查询的结果来确定哪个 unit_price 值最大,子查询调用 unit_price 列值的内置 MAX 聚合函数:
DELETE FROM stock WHERE unit_price = (SELECT MAX(unit_price) FROM stock );
如果作为修改相同表的 DELETE 语句的 WHERE 子句中的子查询的数据源的表上定义了已启用的 Select 触发器,则在 DELETE 语句中执行该子查询不会激活触发器。
DELETE 语句中的子查询可以包含 UNION 或 UNION ALL 运算符。
请参阅 子查询的条件主题以获取有关 DELETE 语句的 WHERE 子句中将多行返回为谓词的子查询的语法的更多信息。