问题描述
我正在尝试更新与查询匹配的所有产品中的字段 buyPrice
,正确的语法是什么?
我收到此错误
An error occurred while running the statement: sub-select returns 22 columns - expected 1
(code 1 sqlITE_ERROR):,while compiling: UPDATE product set buyPrice = ? in
(SELECT * FROM product p JOIN roomuser u ON p.businessId = u.currentBusinessId WHERE sellPrice 10
这是我目前的查询:
@Query("""
UPDATE product
set buyPrice = :newPrice in
(SELECT * FROM
product p JOIN user u ON p.businessId = u.currentBusinessId
WHERE sellPrice < 10)
""")
suspend fun updateProduct(newPrice: Float)
解决方法
我认为您想在 UPDATE 语句中使用 WHERE 子句,可能是这样的:
UPDATE product
SET buyPrice = :newPrice
WHERE product_id IN (
SELECT p.product_id
FROM product p JOIN user u
ON p.businessId = u.currentBusinessId
WHERE sellPrice < 10
)
我在我的代码中使用 product_id
,我认为它是表 product
的主键。
或者,如果 sellPrice
是表 product
的列,您可以使用 EXISTS
而不是这样的联接:
UPDATE product
SET buyPrice = :newPrice
WHERE sellPrice < 10
AND EXISTS (SELECT 1 FROM user u WHERE u.currentBusinessId = product.businessId)