2017-11-13 15 views
1

私は現在Slickを勉強中です。 Subqueries、Having、GroupBy in Slick

SELECT name FROM Passenger 
WHERE ID_psg in 
(SELECT ID_psg FROM Pass_in_trip 
GROUP BY place, ID_psg 
HAVING count(*)>1) 

しかし、私はこのような何かを書くために管理している、そしてそれはコンパイルエラーを与える::私はスカラ座にSQLからこのクエリを変換しようとしていた

PassengerTable.table.filter(_.idPsg in (PassInTripTable.table.map(_.idPsgFk))) 
    .filter(PassengerTable.table.count(_.name) > 1) 
    .map(_.name) 

私は本当にどのように知りませんカウントを適用し、Slickでクエリを実行する。 私は本当に助けに感謝します。

答えて

3

val subquery = PassInTripTable.table.groupBy(p => (p.place, p.idPsgFk)) 
    .map { case ((place, id), group) => (id, group.length) } 
    .filter { case (id, count) => count > 1 } 
    .map { case (id, count) => id } 

    val query = PassengerTable.table.filter(_.idPsg in subquery).map(_.name) 

    val action = query.result 

    db.run(action) 

http://slick.lightbend.com/doc/3.0.0/sql-to-slick.html#groupby

http://slick.lightbend.com/doc/3.0.0/sql-to-slick.html#subquery

http://slick.lightbend.com/doc/3.0.0/sql-to-slick.html#having

+1

を試してみてはどうもありがとうございました。特にドキュメントへのリンクについては:) – Cassie