我最近遇到了一个奇怪的问题。以下是有效的SQL:
DELETE FROM customer *;
PostgreSQL DELETE的文档说星号是output_expression
的可能值:
要在DELETE命令之后计算和返回的表达式 每行都被删除。表达式可以使用的任何列名 在USING中列出的表格或表格。写*以返回所有列。
我在有星和没有星星的情况下尝试过它,看不出有什么区别。事实上,我可以在表名之后添加任何单个单词并且它被接受。它甚至不必是实际的列名。没有额外的东西。
db=> DELETE FROM customer wheeeeeee;
DELETE 19
那么它做了什么以及我可以用它做什么?
答案 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。