我正在针对MySql数据库编写以下更新语句:
Orders.filter(_.cookie === cookie).sortBy(_.id.desc).map(_.payTypeId).take(1)
sortBy
和take(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]