アカウントの最新の行を見つけるために、同じテーブルに左結合する必要があるクエリがあります。
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 にジャンプします。