【问题标题】:Ineer Join query with where in scala slick在 scala slick 中使用 where 的内部联接查询
【发布时间】:2018-08-18 16:41:17
【问题描述】:

我有两个表地址,UserAddressMapping 在地址表 Adrressid 中​​,地址在那里,在第三个表中我映射了这个用户 ID 和地址 ID

在sql中

Select a.Addressid,a.AddressNmae 
from address table a 
inner join UserAdrressmaping b on a.Adessressid=b.Adreesid 
where userid=1

如何用 Scala 写这个东西 这就是我所做的很远

   def innerJoin1(UserId:Int): Future[Seq[UserRegister]]  =  {
 val join=address.join(addressid).on(_.Userid === _.UserId)

    dbConfig.run(join.result )
  }

【问题讨论】:

  • 你之前已经自己尝试过什么?代码?

标签: scala slick


【解决方案1】:

对于内部连接,您可以使用光滑的applicative-join 和过滤子句。 例如:

val query = for {
  (address, userAddressMapping) <- Address join UserAddressMapping on (_.id === _.addressId)
  if userAddressMapping.userId === 1
} yield (address.id, address.name)

dbConfig.run(query.result)

【讨论】:

  • def GetPractionerInfo(Horse_id:Int):Future[Seq[(String,String)]]= { val qNested = for{ ((p,e),c) .id == _.userid) .join(users1).on(_._2.horseid===.HorseID) if e.horseid===Horse_id } yield(p .Name, c.HorseName) dbConfig.run(qNested.result) } 我在这个查询中遇到异常
  • 我收到此异常“推断的类型参数 [Boolean] 不符合方法上的类型参数边界 [T <: slick.lifted.rep>
  • 您好,现在异常已经消失,但我没有以正确的格式得到响应意味着标题没有正确响应“[{”_1”:“Abhinay”,“_2”:“chetak”}] " 代替 _1 我想要 Name 代替 _2 我想要 horsename 怎么做
  • 您应该将结果映射到案例类以存档 - docs.scala-lang.org/tour/case-classes.html
  • 这里我加入了三个表,这些表是在不同的案例类中定义的
【解决方案2】:

只是对前一个的补充。如果你碰巧有BigDecimal 对应Id,别忘了投:

if p.userId === BigDecimal.valueOf(42)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多