我有一个查询,我想在其中检索不同的Child
行,但按Parent
. 如果我执行以下操作,我会收到错误消息,因为列表ORDER BY
中未包含指定的DISTINCT
列:
SELECT
DISTINCT c.foo, c.bar
FROM Parent p
JOIN Child c on c.parentId = p.id
ORDER BY p.createdDate
但是,如果我添加p.createdDate
到选择列表中,我将失去Child
行的独特性,因为p.createdDate
它们都不同。
如果我使用 CTE 或子查询首先进行排序,然后从中选择不同的行,则外部查询不能保证它将保持内部/cte 查询的顺序。
有没有办法做到这一点?
您需要
GROUP BY
代替DISTINCT
(效果相同)并且需要聚合要用于排序顺序的列。在这种情况下,我使用MIN
了 ,但您可以在这里使用任何有意义的东西。请注意,由于您是按父表的列排序的,因此子表中的多行可能具有相同的 值
Parent.createdDate
,因此同一列中的排序顺序createdDate
将是不可预测的。您需要从子表中添加至少一列以使排序顺序可预测。正如@ypercube在他的评论中指出的那样,您可以在同一个句子中使用 GROUP BY 和 ORDER BY。
dbfiddle在这里