Я пишу следующий оператор обновления для базы данных 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 есть обсуждение этого без решения.
Обходной путь с использованием простого 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]