按一对多关系在另一个表中按字段排序

时间:2017-01-30 10:22:34

标签: sql postgresql

我有两个表 - 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

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

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

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