带有VIEW的PostgreSQL ORDER BY

带有VIEW的PostgreSQL ORDER BY,第1张

概述假设我想编写一个使用VIEW的简单SELECT查询: CREATE TEMP VIEW people ASSELECT p.person_id ,p.full_name ,p.phoneFROM person pORDER BY p.last_name;SELECT p.* ,h.address ,h.appraisalFROM p 假设我想编写一个使用VIEW的简单SELECT查询:

CREATE TEMP VIEW people ASSELECT      p.person_ID,p.full_name,p.phoneFROM person pORDER BY p.last_name;SELECT     p.*,h.address,h.appraisalFROM people pleft JOIN homes h     ON h.person_ID = p.person_IDORDER BY p.last_name,h.appraisal;

这里显而易见的问题是,当我去执行最终的ORDER BY时,p.last_name不再可用.

如何对最终查询进行排序,以便人员视图的原始序列跟进到最终查询?

这里的简单解决方案是将p.last_name包含在视图中.我不想这样做 – 我的真实世界的例子(更复杂)使这成为一个问题.

我过去和临时表做过类似的事情.例如,我使用CREATE TEMP table测试WITH OIDS创建表,然后执行ORDER BY testing.oID以传递原始序列.

是否有可能对视图做同样的事情?

解决方法 如果你使用row_number()over(),这是可能的.

这是一个例子:

SELECT    p.*,h.appraisalFROM (SELECT *,row_number() over() rn FROM people) pleft JOIN homes h    ON h.person_ID = p.person_IDORDER BY p.rn,h.appraisal;

这是您可以测试的SQL Fiddle.

正如@Erwin Brandstetter正确指出的那样,使用rank()将产生正确的结果并允许对其他字段进行排序(在这种情况下,评估).

SELECT    p.*,rank() over() rn FROM people) pleft JOIN homes h    ON h.person_ID = p.person_IDORDER BY p.rn,h.appraisal;

用这种方式考虑一下,使用row_number(),它总是只按该字段排序,而不管其他任何排序参数.通过使用rank(),其中tIE是相同的,可以很容易地搜索其他字段.

祝好运.

总结

以上是内存溢出为你收集整理的带有VIEW的PostgreSQL ORDER BY全部内容,希望文章能够帮你解决带有VIEW的PostgreSQL ORDER BY所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161364.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存