使用过滤器,sortBy,map和take更新语句

时间:2018-10-03 19:12:29

标签: mysql scala slick

我正在针对MySql数据库编写以下更新语句:

Orders.filter(_.cookie === cookie).sortBy(_.id.desc).map(_.payTypeId).take(1)

sortBytake(1)用于确保我仅更新特定cookie的最新订单。该查询可以作为常规SELECT正常运行,这里的问题是将其用作更新语句。

我得到的错误:

[SlickException: A query for an UPDATE statement must resolve to a comprehension with a single table -- Unsupported shape: Comprehension s2, Some(Apply Function =), None, ConstArray((Path s2.id,Ordering(Desc,NullsDefault))), None, None, Some(LiteralNode 1 (volatileHint=false)), None, false]

如果我删除take(1)子句,则一切正常。为什么我会收到此错误?

Github似乎有一个discussion about this,没有解决方案。

使用普通SQL的解决方法

(此查询返回一个Vector[Int]

        val updateQuery =
      sql"""
         UPDATE
            orders
         SET
          orders.pay_type_id = $id
         WHERE
            orders.cart_cookie = $cookie
         ORDER BY id desc
         LIMIT 1
      """.as[Int]

0 个答案:

没有答案