2012-09-16 105 views
10

我最近遇到了一個怪胎。以下是有效的SQL:「DELETE FROM TABLE」的output_expression是做什麼的?

DELETE FROM customer *; 

PostgreSQL的DELETE文檔說明星是爲output_expression的可能值:

的表達式來進行計算和 每行後DELETE命令返回被刪除。該表達式可以使用USING中列出的 表或列表的任何列名。寫*返回所有列。

我試過,沒有明星,也沒有看到區別。事實上,我可以在表名之後添加任何單詞,並且可以接受。它甚至不必是實際的列名稱。沒有額外的返回。

db=> DELETE FROM customer wheeeeeee; 
DELETE 19 

那麼它做了什麼,我可以用它做什麼?

問題also posted on the PostgreSQL mailing list

+0

爲什麼不嘗試它並找出? –

+0

我做到了。它只是刪除行並返回沒有特別的東西。 –

+4

看起來像是錯過了'RETURNING',它是'output_expression'前面的語法的非可選部分我假設'*'只是被視爲別名(如'wheeeeeee')。 –

回答

5

星號爲 output_expression,爲此,你將不得不使用RETURNING關鍵字。它是一個陳舊的過時的語法,用於在查詢中包含子表。 (最後一個版本的文檔似乎是PostgreSQL 8.1。由於語法仍然有效,所以它是一個文檔錯誤,正如Tom Lane在下面鏈接的帖子中指出的那樣)。

由於PostgreSQL 7.1是默認的除非sql_inheritance設置爲關閉),ONLY關鍵字用於相反,所以*不是很有用。

請參閱this explanatory post from Tom Lane on the PostgreSQL mailing list

相關問題