简体   繁体   English

需要使用多个“ AND”转换OUTER JOIN

[英]Need to convert OUTER JOIN with multiple “AND”

I have this raw sql I'd like to convert to Esqueleto. 我有想要转换为Esqueleto的原始sql。 It should bring all the group s that user ID 1, isn't registered to via the group_membership table. 它将所有未通过group_membership表注册的用户ID 1的group group_membership

SELECT * 
FROM group
LEFT OUTER JOIN group_membership
  ON (group.id = group_membership.group_id AND group_membership.user_id=1)
  WHERE group_membership.group_id IS NULL

And here is the answer I gathered from different issues: 这是我从不同问题中收集到的答案:

getGroups userId = do
    runDB
        . E.select
        . E.from $ \(group `E.LeftOuterJoin` groupMembership) -> do
            E.on $ E.just (group ^. GroupId) E.==. (groupMembership ?. GroupMembershipGroupId) &&.
                   (groupMembership ?. GroupMembershipUserId) E.==. E.just (E.val userId)
            E.where_ $ E.isNothing (groupMembership ?. GroupMembershipGroupId)
            return
              ( group ^. GroupId
              , group ^. GroupTitle
              )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM