对更新的限制

当您修改数据时,对子查询的使用存在限制。特别是,您不可查询正在修改的表。您可在表达式中引用列的当前值,如同在 unit_price 列增大百分之五的示例中那样。您还可引用在子查询中的 WHERE 子句中的列的值,如同在更新了 stock 表的示例中那样,其中,更新 items 表,且在连接表达式中使用 items.stock_num

在设计良好的数据库中,不会经常发生同时更新与查询一个表的需要。(要获取关于数据库设计的更多信息,请参阅 GBase 8s 数据库设计和实现指南。)然而,当您首次开发数据库时,尚未认真全面地考虑它的设计之前,您可能想要同时更新和查询。当无意中且错误地在表的应为唯一的列中包含了带有重复值的几行时,会发生一个典型的问题。您可能想要删除重复的行,或仅更新重复的行。不论是哪种方式,不可避免地需要对您想要修改的同一表上的子查询进行重复的行的测试。这在 UPDATE 语句或 DELETE 语句中是不允许的。通过 SQL 程序修改数据 讨论如何使用更新游标来执行此种修改。