Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 是否可以从RETURNING子句中获取不同的行?_Postgresql_Sql Returning - Fatal编程技术网

Postgresql 是否可以从RETURNING子句中获取不同的行?

Postgresql 是否可以从RETURNING子句中获取不同的行?,postgresql,sql-returning,Postgresql,Sql Returning,我们正在使用PostgreSQL v8.2.3 是否可以使用返回语句从UPDATE语句中获取不同的行 条款 MYTABLE列包括: APRIMARYKEYCOLUMN ABOOLEANCOLUMN 电子邮件 专栏1 专栏2 第3栏 使用RETURNING子句查询更新: UPDATE MYTABLE SET ABOOLEANCOLUMN = true FROM MYTEMPTABLE WHERE EMAIL = MYTEMPTABLE.EMAIL RETURNING EMAIL, COLUMN1,

我们正在使用PostgreSQL v8.2.3

是否可以使用返回语句从UPDATE语句中获取不同的行 条款

MYTABLE列包括:

  • APRIMARYKEYCOLUMN
  • ABOOLEANCOLUMN
  • 电子邮件
  • 专栏1
  • 专栏2
  • 第3栏
  • 使用RETURNING子句查询更新:

    UPDATE MYTABLE SET ABOOLEANCOLUMN = true FROM MYTEMPTABLE WHERE EMAIL =
    MYTEMPTABLE.EMAIL RETURNING EMAIL, COLUMN1, COLUMN2, COLUMN3;
    
    在本例中,我希望从这些列返回不同的行: 电子邮件,第一栏,第二栏,第三栏

    我甚至尝试了一些获得不同行的方法,但都不起作用。 虽然我仍然可以在应用层解决这个问题,但我正在努力找到 是否可以在查询级别解决/控制此问题。有什么不同吗
    非常感谢您的想法/建议。

    不,您不能。返回很好,但它与普通的SELECT语句不同。返回是基于记录的,而不是基于集合的。DISTINCT在一个集合上工作。

    这是一个老问题,但由于它是搜索中的第一个答案,而且该答案已过时,我将与大家分享

    使用从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;
    

    @弗兰克:没有其他可能的方法从这个基于记录的文件中提取不同的行吗?你可以将更新包装在一个存储过程中,让这个过程处理不同的行。但是,当您不能使用distinct时,您会遇到什么问题?RETURNING告诉您哪些记录已被更新。@Frank:根据与此处不同的行,我在下一级附加了一些应用程序逻辑。没有别的。在应用程序中修复它,保持逻辑一致。我不能帮你,太糟糕了。@Frank:这只是为了我的理解。基于记录和基于集合的区别到底是什么?