加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何将AND添加到连接SLICK

发布时间:2020-12-16 18:15:44 所属栏目:安全 来源:网络整理
导读:我在SLICK中编写查询时遇到问题 这是我对 MySql数据库的请求: SELECT * FROM readings AS rJOIN parameters AS pLEFT JOIN sensorvalues AS sv ON sv.parameter_id=p.id AND sv.reading_id=r.id 如何使用SLICK编写它?它真的缺乏关于文档连接的信息. 更新1
我在SLICK中编写查询时遇到问题
这是我对 MySql数据库的请求:

SELECT * FROM readings AS r
JOIN parameters AS p
LEFT JOIN sensorvalues AS sv ON sv.parameter_id=p.id AND sv.reading_id=r.id

如何使用SLICK编写它?它真的缺乏关于文档连接的信息.

更新1
我尝试了所有这些组合甚至是这样的组合

val q = for{
  Join(p,sv) <- Parameters leftJoin SensorValues on (_.id is sv.parameter_id)
  r <- Readings if sv.reading_id is r.id
} yield(r,p,sv)

在这种情况下编译器给我一个错误的错误参数数量;预期= 2

所以我将sv.parameter_id替换为_.parameter_id,现在它争论了Join
它说:

构造函数无法实例化为期望的类型;发现:models.Join必需:(models.Parameters.type,models.SensorValues.type)

我正在使用最新版本的SLICK,它已被弃用.我手动导入

导入scala.slick.lifted.Join,现在它看起来像是常规的innerJoin,因为它使用WHERE而不是put并在ON之后.

SQL生成的购买查询:

选择x2.id,x2.platform_id,x2.date,x3.x4,x3.x5,x3.x6,x7.x8,x7.x9,x7.x10,x7.x11(选择x12.id为x4,x12 .name为x5,x12.units为x6,来自参数x12)x3左外连接(选择x13.id为x8,x13.reading_id为x9,x13.parameter_id为x10,x13.value为x11,来自sensorValues x13)x7 on x3 .x4 = x7.x10,读数x2其中为真和(x7.x9 = x2.id)

即使这个也适用于ON部分的附加条件

val readings = for {
        all <-Readings join Parameters leftJoin SensorValues on (_._2.id is _.parameter_id) if(all._1._1.id === all._2.reading_id)
      } yield (all._1._1,all._1._2,all._2)

但这绝不是令人讨厌的.

SELECT
    x2.x3,x2.x4,x2.x5,x2.x6,x2.x7,x2.x8,x9.x10,x9.x11,x9.x12,x9.x13
FROM
    (
        SELECT
            x14.x15 AS x3,x14.x16 AS x4,x14.x17 AS x5,x18.x19 AS x6,x18.x20 AS x7,x18.x21 AS x8
        FROM
            (
                SELECT
                    x22.`id` AS x15,x22.`platform_id` AS x16,x22.`date` AS x17
                FROM
                    `readings` x22
            )x14
        INNER JOIN(
            SELECT
                x23.`id` AS x19,x23.`name` AS x20,x23.`units` AS x21
            FROM
                `parameters` x23
        )x18
    )x2
LEFT OUTER JOIN(
    SELECT
        x24.`id` AS x10,x24.`reading_id` AS x11,x24.`parameter_id` AS x12,x24.`value` AS x13
    FROM
        `sensorValues` x24
)x9 ON x2.x6 = x9.x12
WHERE
    x2.x3 = x9.x11

相反,我需要和.我应该使用什么来提及这个条件或者没有光滑的功能呢?

解决方法

编辑
OP正在寻找两个表对象连接的条件链接.

这应该编译:

val q = for{
  r <- Readings
  Join(p,s) <- Params leftJoin Sensors on (
    (a,b)=> (a.id is b.parameter_id) && (b.reading_id is r.id)
  )
} yield(r,s)

原版的
尝试这样的事情:

val q = for{
  Join(p,s) <- Params leftJoin Sensors on (_.id is s.parameter_id)
  r <- Readings if s.reading_id is r.id
} yield(r,s)

val result = 
  q.list.map{ case(r,s)=>
    SomeCaseClass(r,s)
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读