我有两个表-orderspayments在PostgreSQL数据库中是一对多的。
我想通过orders订购payments.status
尝试以下查询:

SELECT DISTINCT ON (payments.id) orders.*
FROM orders
INNER JOIN payments ON orders.id=payments.order_id
ORDER BY payments.id, payments.status DESC

但是对于INNER JOIN它将拒绝缺少payments的记录。
我也尝试过使用OUTER JOIN解决方案:
SELECT DISTINCT ON (payments.id) orders.*
FROM orders
LEFT OUTER JOIN payments ON orders.id=payments.order_id
ORDER BY payments.id, payments.status DESC

但它似乎也削减了一些价值观,不知道为什么。

最佳答案

请尝试以下操作:

SELECT col1, col2, col3, ... FROM
   (
      SELECT DISTINCT ON (orders.id) orders.*, payments.status payment_status
      FROM orders
         LEFT OUTER JOIN payments ON orders.id = payments.order_id
      ORDER BY payments.create_ts DESC
   ) wrap
ORDER BY payment_status;

这里payments.create_ts按时间订购付款。如果你的id单调增加,你可以用它代替。
col1col2col3orders表中的列–该列表包含所有列,但不包含payment_status

关于sql - 一对多关系中另一个表中的字段排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41933512/

10-11 04:53