2011-02-17 84 views
1

我們正在使用PostgreSQL v8.2.3。是否有可能從RETURNING子句中獲得DISTINCT行?

是否有可能從UPDATE語句中使用RETURNING 子句獲取DISTINCT行?

MYTABLE欄目有:

  1. APRIMARYKEYCOLUMN
  2. ABOOLEANCOLUMN
  3. EMAIL
  4. COLUMN1
  5. COLUMN2
  6. 欄3

使用UPDATE RETURNING子句查詢:

UPDATE MYTABLE SET ABOOLEANCOLUMN = true FROM MYTEMPTABLE WHERE EMAIL = 
MYTEMPTABLE.EMAIL RETURNING EMAIL, COLUMN1, COLUMN2, COLUMN3; 
在這種情況下

在這裏,我期望從這些列返回重複行: EMAIL,COLUMN1,COLUMN2,欄3。

我甚至嘗試過一些獲取不同行的方法,但它不起作用。 雖然我仍然可以在應用程序層解決這個問題,但我試圖找到 這是否可以在查詢級別解決/控制。任何不同的 意見/建議表示讚賞。

回答

1

不,你不能。 RETURNING很棒,但它與普通的SELECT語句不同。 RETURNING是基於記錄的,不是基於設置的。 DISTINCT在一個集合上工作。

+0

@Frank:沒有其他可能的方式從此記錄獲取DISTINCT行嗎? – Gnanam

+0

您可以將更新包裝在存儲過程中,並讓此過程處理distinctnes。但是當你不能使用不同的時候你有什麼問題? RETURNING告訴你哪些記錄已被更新。 –

+0

@Frank:基於來自這裏的DISTINCT行,我在下一個級別附加了一些應用程序邏輯。沒有其他的。 – Gnanam

3

這是一個古老的問題,但因爲它是作爲搜索的第一個答案,並且答案已過時,我正在分享。

使用通用表格表達式(CTE),自PG版本8.4起可用,您可以更新/刪除並獲得不同的結果。

WITH updater AS 
(
    UPDATE MYTABLE SET ABOOLEANCOLUMN = true FROM MYTEMPTABLE WHERE EMAIL = MYTEMPTABLE.EMAIL RETURNING EMAIL, COLUMN1, COLUMN2, COLUMN3 
) 
SELECT DISTINCT EMAIL, COLUMN1, COLUMN2, COLUMN3 
FROM updater; 
相關問題