2016-08-13 3 views
0

У меня есть этот необработанный sql-код, который я бы хотел преобразовать в Esqueleto. Он должен привести все group с этим идентификатором пользователя 1, не зарегистрированным в таблице group_membership.Необходимо преобразовать 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

Я могу увидеть некоторую связанную информацию о том, как сделать 'IS NULL', но все еще застряли на нескольких' AND' - https://github.com/prowdsponsor/esqueleto/issues/50#issuecomment-37094450 – amitaibu

+0

И 'AND' внутри' on' ответил здесь - 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 
      )