【问题标题】:Slick:Insert into a Table from Raw SQL SelectSlick:从原始 SQL 选择插入表
【发布时间】:2020-12-04 07:54:34
【问题描述】:

从原始 SQL 选择插入到表中

val rawSql: DBIO[Vector[(String, String)]] = sql"SELECT id, name FROM SomeTable".as[(String, String)]
val myTable :TableQuery[MyClass] // with columns id (String), name(String) and some other columns

有没有办法使用forceInsert 函数将数据从选择插入到表中? 如果没有,有没有办法使用forceInsertStatements 生成一个sql 字符串? 比如:

db.run {
   myTable.map{ t => (t.id, t.name)}.forceInsert????(rawSql)
}

附:我不想进行两次 I/O 调用,因为我的 RAW SQL 可能会返回数千条记录。 感谢您的帮助。

【问题讨论】:

    标签: scala slick slick-3.0 slick-2.0 slick-pg


    【解决方案1】:

    如果您可以将 rawSql 查询表示为 Slick 查询...

    val query = someTable.map(row => (row.id, row.name))
    

    ...例如,forceInsertQuery 将满足您的需求。一个例子可能是:

      val action =
         myTable.map(row => (row.someId, row.someName))
          .forceInsertQuery(
            someTable.map(query)
          )
    

    但是,我认为您使用原始 SQL 是有充分理由的。在这种情况下,我不相信您可以使用 forceInsert(无需往返数据库),因为原始 SQL 已经是一个操作(而不是查询)。

    但是,既然您使用的是原始 SQL,那么为什么不使用原始 SQL 来完成整个事情呢?比如:

     val rawEverything = 
      sqlu" insert into mytable (someId, someName) select id, name from sometable "
    

    ...或类似的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-18
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多