2011-02-17 50 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; 
相关问题