2016-08-13 3 views
0

Ich habe diese rohe SQL Ich möchte in Esqueleto konvertieren. Es sollte alle group s diese Benutzer-ID 1 bringen, über die Tabelle nicht registriert ist.Müssen OUTER JOIN mit mehreren "AND" konvertieren

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

Ich bin in der Lage einige relevante Informationen zu sehen, wie die 'zu tun ist, NULL', aber immer noch auf dem mehrfach stecken' UND '- https://github.com/prowdsponsor/esqueleto/issues/50#issuecomment-37094450 – amitaibu

+0

Und das' AND' innerhalb des 'on' antwortete hier - https://github.com/prowdsponsor/esqueleto/issues/126 # issementcomment-172010758 – amitaibu

Antwort

0

Und hier ist die Antwort, die ich aus verschiedenen Themen gesammelt:

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 
      )