Scalaquery在连接到同一个表时生成无效的sql

时间:2012-11-20 00:11:26

标签: scala scalaquery

我有一个查询需要将联接保留在同一个表中以查找帐户的最新行。

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 个答案:

答案 0 :(得分:0)

SLICK 0.11.2适用于此用例。我将我的项目迁移到scala 2.10 / play 2.1 for this