在Slick中表达SQL IF ELSE

问题描述 投票:0回答:1

例如,如何在Slick中表达此SQL?

select column as true / false if id is exists in another table

join(Services).on(_.mid === _.id).map {
    case (m, s) => (m.id, m.name, ???).mapTo[SomeClass]
}
mysql scala slick
1个回答
1
投票

尝试

  import slick.jdbc.PostgresProfile.api._

  case class Member(id: Int, name: String, phone: String)

  class MemberTable(tag: Tag) extends Table[Member](tag, "members") {
    def id = column[Int]("id", O.PrimaryKey)
    def name = column[String]("name")
    def phone = column[String]("phone")
    def * = (id, name, phone) <> (Member.tupled, Member.unapply)
  }

  case class Service(mid: Int, profile: Int, lastSeen: String)

  class ServiceTable(tag: Tag) extends Table[Service](tag, "services") {
    def mid = column[Int]("mid", O.PrimaryKey)
    def profile = column[Int]("profile")
    def lastSeen = column[String]("last_seen")
    def * = (mid, profile, lastSeen) <> (Service.tupled, Service.unapply)
  }

  val members = TableQuery[MemberTable]
  val services = TableQuery[ServiceTable]
  case class SomeClass(mid: Int, name: String, services: Boolean)

  members.joinLeft(services).on(_.id === _.mid).map {
    case (m, s) => (m.id, m.name, s.isDefined).mapTo[SomeClass]
  }
© www.soinside.com 2019 - 2024. All rights reserved.