加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使用ScalaQuery只选择一个符合where子句的第一个或最后一个

发布时间:2020-12-16 18:11:24 所属栏目:安全 来源:网络整理
导读:使用以下查询模板选择全部: val q = for { a - Parameters[Int] b - Parameters[Int] t - T if t.a == a t.b == b _ - Query.orderBy(t.c,t.d)} yield t 我需要修改它以选择第一个(c的最小c和d最小)或最后一个(c的最大c和d最大值)记录匹配where条件的记录.
使用以下查询模板选择全部:

val q = for {
  a <- Parameters[Int]
  b <- Parameters[Int]
  t <- T if t.a == a && t.b == b
  _ <- Query.orderBy(t.c,t.d)
} yield t

我需要修改它以选择第一个(c的最小c和d最小)或最后一个(c的最大c和d最大值)记录匹配where条件的记录.我通常强烈不会选择其他(最后/第一个)记录,因为有数十万个记录……

解决方法

OP的查询目前是如何构建的,这里存在潜在的危险.按原样运行,获取100K结果集的第一个或最后一个结果并不是非常有效(不太可能,是的,但重点是,查询对返回的行数没有限制)

使用直接SQL,你永远不会做这样的事情;相反,你会在限制1上

在ScalaQuery中,LIMIT = take(n),因此添加take(1)以获取从查询本身返回的单个记录

val q = (for {
  a <- Parameters[Int]
  b <- Parameters[Int]
  t <- T if t.a == a && t.b == b
  _ <- Query.orderBy(t.c,t.d)
} yield t) take(1)
q.firstOption

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读