我有两个表 - orders
和payments
在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
但它也似乎削减了一些价值,不知道为什么。
答案 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
单调增加,则可以使用它。
col1
,col2
,col3
是orders
表格中的列 - 该列表包含所有列,但不包含payment_status
。