“DELETE FROM table”的输出表达式有什么作用?

时间:2012-09-16 07:55:16

标签: sql postgresql sql-delete

我最近遇到了一个奇怪的问题。以下是有效的SQL:

DELETE FROM customer *;

PostgreSQL DELETE的文档说星号是output_expression的可能值:

  

要在DELETE命令之后计算和返回的表达式   每行都被删除。表达式可以使用的任何列名   在USING中列出的表格或表格。写*以返回所有列。

我在有星和没有星星的情况下尝试过它,看不出有什么区别。事实上,我可以在表名之后添加任何单个单词并且它被接受。它甚至不必是实际的列名。没有额外的东西。

db=> DELETE FROM customer wheeeeeee;
DELETE 19

那么它做了什么以及我可以用它做什么?

问题also posted on the PostgreSQL mailing list

1 个答案:

答案 0 :(得分:5)

星号 output_expression,为此您必须使用RETURNING关键字。相反,它是一种旧的,过时的语法,用于在查询中包含子表。 (它记录的最后一个版本似乎是PostgreSQL 8.1。由于语法仍然有效,它是一个文档错误,正如Tom Lane在下面链接的帖子中指出的那样。)

由于PostgreSQL 7.1这是默认设置(除非sql_inheritance设置为off),而ONLY关键字用于相反的设置,因此*不是很有用。

请参阅this explanatory post from Tom Lane on the PostgreSQL mailing list