2011-02-17 5 views
1

私たちはPostgreSQL v8.2.3を使用しています。RETURNING句からDISTINCT行を取得できますか?

RETURNING 節を使用して、UPDATE文からDISTINCT行を取得できますか?

MYTABLE列は次のとおり

  1. APRIMARYKEYCOLUMN
  2. ABOOLEANCOLUMN
  3. EMAIL
  4. COLUMN1
  5. COLUMN2
  6. COLUMN3
RETURNING句のクエリを使用して

UPDATE:

ここで、この場合の
UPDATE MYTABLE SET ABOOLEANCOLUMN = true FROM MYTEMPTABLE WHERE EMAIL = 
MYTEMPTABLE.EMAIL RETURNING EMAIL, COLUMN1, COLUMN2, COLUMN3; 

、私はこれらの列から個別の行を返すことを期待: EMAIL、COLUMN1、COLUMN2、COLUMN3。

私は別の行を取得するいくつかの方法を試しましたが、動作しません。 私はまだアプリケーション層でこれを解決することができますが、私は を解決しようとしています。任意の異なる アイデア/提案をいただければ幸いです。

答えて

1

いいえできません。 RETURNINGは素晴らしいですが、通常のSELECT文と同じではありません。 RETURNINGはレコードベースであり、セットベースではありません。 DISTINCTはセットで動作します。

+0

@Frank:このレコードベースからDISTINCT行を取得する他の方法はありませんか? – Gnanam

+0

ストアドプロシージャ内の更新プログラムをラップし、このプロシージャではdistinctnesを処理させることができます。しかし、別のものを使うことができないときは、どのような問題がありますか? RETURNINGは、どのレコードが更新されたかを示します。 –

+0

@Frank:ここからのDISTINCT行に基づいて、私は次のレベルでこれにいくつかのアプリケーションロジックを付けました。他に何もない。 – Gnanam

3

これは古い質問ですが、それは検索の最初の回答として出てきたので、その回答は古いです。私は共有しています。

PGバージョン8.4以降で使用可能な共通テーブル式(CTE)を使用すると、更新/削除して別個の結果を得ることができます。

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; 
関連する問題