Scala 使用slick创建表视图

Scala 使用slick创建表视图,scala,slick,Scala,Slick,如何使用slick 3创建查询 我在那张精美的文件里找不到答案 这个问题与我的另一个问题有关。我得到了正确的答案,但我不知道如何使用slick实现它 在Slick 3中只有对视图的基本支持,不能保证完整的编译时安全性和组合性,考虑到大多数视图强烈依赖于其他表中的数据,后者尤其重要。 您可以将视图描述为表和单独的模式操作语句,必须使用这些语句,而不是标准的表模式扩展方法,如create和drop。以下是数据库中已存在的注册表主题和行表的示例: case class RegRn(id: Int, n

如何使用slick 3创建查询

我在那张精美的文件里找不到答案


这个问题与我的另一个问题有关。我得到了正确的答案,但我不知道如何使用slick实现它

在Slick 3中只有对视图的基本支持,不能保证完整的编译时安全性和组合性,考虑到大多数视图强烈依赖于其他表中的数据,后者尤其重要。 您可以将视图描述为表和单独的模式操作语句,必须使用这些语句,而不是标准的表模式扩展方法,如create和drop。以下是数据库中已存在的注册表主题和行表的示例:

case class RegRn(id: Int, name: String, count: Long)

trait View{
  val viewName = "REG_RN"
  val registryTableName = "REGISTRY"
  val rowsTableName = "ROWS"

  val profile: JdbcProfile
  import profile.api._

  class RegRns(tag: Tag) extends Table[RegRn](tag, viewName) {

    def id    = column[Int]   ("REGISTRY_ID")
    def name  = column[String]("NAME", O.SqlType("VARCHAR"))
    def count = column[Long]  ("CT", O.SqlType("VARCHAR"))

    override def * = (id, name, count) <> (RegRn.tupled, RegRn.unapply)
    ...
  }

  val regRns = TableQuery[RegRns]
  val createViewSchema = sqlu"""CREATE VIEW #$viewName AS
                                   SELECT R.*, COALESCE(N.ct, 0) AS CT
                                   FROM   #$registryTableName R
                                   LEFT   JOIN (
                                     SELECT REGISTRY_ID, count(*) AS CT
                                     FROM   #$rowsTableName
                                     GROUP  BY REGISTRY_ID
                                   ) N ON R.REGISTRY_ID=N.REGISTRY_ID"""

  val dropViewSchema = sqlu"DROP VIEW #$viewName"
  ...
}

在视图序言之后追加查询文本如何:

val yourAwesomeQryComposition : TableQuery = ...

val qryText = yourAwesomeQryComposition.map(reg => (reg.id, ....)).result.statements.head

val createViewSchema = sqlu"""CREATE VIEW #$viewName AS #${qryText}"""
val yourAwesomeQryComposition : TableQuery = ...

val qryText = yourAwesomeQryComposition.map(reg => (reg.id, ....)).result.statements.head

val createViewSchema = sqlu"""CREATE VIEW #$viewName AS #${qryText}"""