使用内部联接更新查询的正确语法

问题描述

我正在尝试更新与查询匹配的所有产品中的字段 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)