Postgresql 是否可以从RETURNING子句中获取不同的行?
我们正在使用PostgreSQL v8.2.3 是否可以使用返回语句从UPDATE语句中获取不同的行 条款 MYTABLE列包括: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,
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:这只是为了我的理解。基于记录和基于集合的区别到底是什么?