В настоящее время существует ограниченная поддержка объединений, и я считаю, что это только SQL.
У меня есть пара помощников, которые я использую для простых случаев.Их можно найти здесь .Это не настоящий JOIN, он выбирает один раз для каждой таблицы, а затем создает список кортежей, представляющих «соединенные» строки с элементами из каждого.
Учитывая ваши модели и этого помощника, вы должны иметь возможность сделать что-то вроде:
records <- runDB $ do
sessions <- selectList [] []
players <- selectList [] []
tables <- selectList [] []
return $ joinTables3 gamingSessionPlayer gamingSessionTable sessions players tables
forM records $ \(session, player, table) -> do
--
-- ...
--
Будут возвращены только те случаи, когда запись существует во всех трех таблицах (так что это ВНУТРЕННЕЕ СОЕДИНЕНИЕ), но вам может потребоваться предварительная фильтрация для эффективности.