Slick中的子查询,Having和GroupBy

卡西

我目前正在学习Slick。我试图将此查询从SQL转换为Scala:

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

但是我只设法写了这样的东西,它给出了编译错误:

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

我真的不知道如何在Slick中应用计数和查询。因此,我非常感谢您的帮助。

米米(Dmytro Mitin)

尝试

  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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章