我有一个查询需要左连接到同一个表上才能找到帐户的最新行。
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。