【问题标题】:How to query an optional column value with a fallback in Slick 3.x如何在 Slick 3.x 中使用后备查询可选列值
【发布时间】:2016-07-09 13:17:15
【问题描述】:

我想在 Slick 中编写一个查询,如果该列不为 null,则获取该列,如果该列为 null,则默认为另一列的值。如何在不重复调用 db.run 的情况下做到这一点?

【问题讨论】:

  • 您能举个例子说明一下吗?这是否意味着您有一些可以为空的first_col 和一些不可为空的second_col,并且在对first_col 的查询期间,所有空值都应该被来自second_col 的值替换?
  • 是的,这正是我的意思,谢谢。
  • 您使用什么版本的 Slick?是 Slick 2.x 还是 Slick 3.x?
  • 这是 Slick 3.x,谢谢。

标签: scala slick


【解决方案1】:

假设您的表定义如下所示:

import slick.driver.PostgresDriver.api._ // Import your driver here

class EmployeesTable(tag: Tag) extends Table[(Option[Int], Int)](tag, "employees") {
  def firstCol = column[Option[Int]]("first_col") // This column is nullable
  def secondCol = column[Int]("second_col") // This column is non-nullable

  def * = (firstCol, secondCol)
}

那么您的查询可能如下所示:

val query = TableQuery[EmployeesTable].map(employee => employee.firstCol.ifNull(employee.secondCol))
val result: Future[Seq[Int]] = db.run(query.result)

这样first_col 中的每个空值都将被second_col 中的值替换。这将等效于以下 SQL 查询:

select coalesce("first_col", "second_col") from "employees"

【讨论】:

  • 这实际上并没有解决我的问题,但它确实雄辩地回答了原始问题,所以我接受了它,感谢您的帮助。
猜你喜欢
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多