【问题标题】:want to know better way of joining tables with slick想知道用 slick 连接表格的更好方法
【发布时间】:2013-09-04 09:00:19
【问题描述】:

我有一个示例查询,如下所示:

val query =
  (for {
    (company,loc) <- Company leftJoin Location  on (_.locId === _.id)
    (_,typeof) <- Company leftJoin Types on (_.typeId === _.id)
  } yield (company, loc, typeof))

是否有更好的方法进行多个连接?

我尝试了multiple joins with slick 中的建议,但出现了错误。

【问题讨论】:

  • 更好的方法是什么意思?这有什么不好?
  • 我看到生成的查询在同一张表 Company 上生成多个查询两次,一次与位置连接,一次与类型连接。通常使用 sql 它发生在一个查询多个连接中。想知道这是否有问题。

标签: scala slick


【解决方案1】:

这工作正常。

for {
    ((company,geo),typeof) <- Company 
        leftJoin Location on (_.locId === _.id) 
        leftJoin Business_Levels on (_._1.typeId === _.id)
}

【讨论】:

  • 这回答了你的问题,对吧?在这种情况下,请将其标记为答案:)。谢谢
【解决方案2】:

您可以正常链接连接:

for {
    (company, location, type) <- Company 
        leftJoin Location  on (_.locId === _.id) 
        leftJoin Types on (_._1.typeId === _.id)
} yield (company, location, type)

顺便说一句,我很确定 type 这个词是 scala 保留字。

编辑:在 dsr301 的评论之后的第 3 行添加了 _.1。

【讨论】:

  • 是的,类型是关键字,由于某些原因,帖子没有原始名称。任何方式都改变了它。它给了我上面提到的编译错误。 ')' 预期但 '.'成立。在 (_.typeId === _.id)
  • 在将完整查询更改为一个单独的查询后,收到此错误 "typeId is not a member of (models.company.type, models.Location.type)" 。我认为第二次连接是在第一次连接生成的元组上执行的
【解决方案3】:

您可以查看 scala days 演示文稿中关于 slick 的自动连接技巧 - http://www.parleys.com/play/51c2e20de4b0d38b54f46243/chapter50/agenda

0:27:30 检查

【讨论】:

猜你喜欢
  • 2021-11-04
  • 2021-05-03
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 2020-08-03
  • 2017-10-30
相关资源
最近更新 更多