我有两个表-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
但它似乎也削减了一些价值观,不知道为什么。
最佳答案
请尝试以下操作:
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
。关于sql - 一对多关系中另一个表中的字段排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41933512/