0

アカウントの最新の行を見つけるために、同じテーブルに左結合する必要があるクエリがあります。

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 にジャンプします。

4

1 に答える 1

0

SLICK 0.11.2は、このユースケースで機能します。このためにプロジェクトをscala2.10/play2.1に移行しました

于 2012-11-20T09:32:10.637 に答える