我在构建一个查询时遇到问题,该查询将按照多对多关系中的关联表的列进行排序。
比方说,例如,用户has_many标题和标题has_many用户。他们的关系在UserTitle表中。我如何编写一个范围(以便它可以与其他查询链接) 返回按"名称"排序的用户用户的第一个标题栏
<User id: 1, name: 'Bob'>
<User id: 2, name: 'Joe'>
<UserTitle id: 1, user_id: 1, title_id: 2>
<UserTitle id: 2, user_id: 2, title_id: 1>
<UserTitle id: 3, user_id: 2, title_id: 2>
<Title id: 1, name: 'A-Name'>
<Title id: 2, name: 'B-Name'>
如果那些是我的数据库中带有关联表的User对象,我希望排序查询首先返回Joe,然后是Bob(因为Joe的第一个标题是带有A的标题,它首先出现在字母表)。使用ruby逻辑这很容易,但是当使用ActiveRecord构建SQL查询时,我不确定如何处理它。
答案 0 :(得分:0)
一种方式(很多)是CROSS JOIN LATERAL
:
SELECT u.*
FROM "User" u
CROSS JOIN LATERAL (
SELECT title_id
FROM "UserTitle"
WHERE user_id = u.user_id
ORDER BY usertitle_id
LIMIT 1
)
JOIN "Title" t USING (title_id);
最佳查询取决于您的要求和环境的未公开详细信息。
相关: