2016-08-13 9 views
0

저는이 원시 SQL을 Esqueleto로 변환하고 싶습니다. 해당 사용자 ID 1이 group이고 모두 group_membership 테이블을 통해 등록되어 있지 않아야합니다.여러 개의 "AND"가있는 OUTER JOIN을 변환해야합니다.

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 
+0

'NULL'입니다 만, 여전히 여러'에 붙어 AND' - https://github.com/prowdsponsores/esqueleto/issues/50#issuecomment-37094450 – amitaibu

+0

그리고 'on'안의 'AND'가 여기에 응답했습니다 - https://github.com/prowdsponsor/esqueleto/issues/126 # issuecomment-172010758 – amitaibu

답변

0

그리고 여기에 내가 다른 문제에서 수집 답변입니다 : 내가 수행하는 방법에 대한 몇 가지 관련 정보를 볼 수 있어요

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 
      )