Scalaquery, генерирующий недопустимый sql при соединении на той же таблице

У меня есть запрос, который нужно оставить присоединиться к той же таблице, чтобы найти последнюю строку учетной записи.

val all = for { 
  Join(s,s1) <- Subscriptions leftJoin Subscriptions 
                  on ((a,b) => a.account === b.account &&  a.id < b.id)  
                  if s1.id.?.isNull
} yield s

Это генерирует следующий SQL

SELECT `t2`.`ACCOUNT`,`t2`.`PLAN`,`t2`.`CALLBACK`,`t2`.`DELETED`,`t2`.`HIBERNATED`,`t2`.`CREATED`,`t2`.`UPDATED` FROM {oj `SUBSCRIPTION` `t2` left outer join `SUBSCRIPTION` `t2` on ((`t2`.`ID`=`t2`.`ID`) and (`t2`.`ID` < `t2`.`ID`))} WHERE (`t2`.`ID` is null)

Проблема с Subscription t2 left join Subscription t2, Таблицы должны иметь разные псевдонимы.

Я справился с этой проблемой, скопировав и вставив объект в Subscriptionsи изменил запрос на

val all = for { 
  Join(s,s1) <- Subscriptions leftJoin Subscriptions1 
                  on ((a,b) => a.account === b.account &&  a.id < b.id)  
                  if s1.id.?.isNull
} yield s

Этот запрос генерирует допустимый SQL, но он не идеален.

Это можно обойти? Если он зафиксирован в SLICK, то произойдет переход к scala 2.10.

1 ответ

Решение

SLICK 0.11.2 работает с этим вариантом использования. Я перенес свой проект в scala 2.10/play 2.1 для этого

Другие вопросы по тегам