【问题标题】:Correct syntax for update query with inner join使用内部联接的更新查询的正确语法
【发布时间】:2021-01-28 22:02:43
【问题描述】:

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

【问题讨论】:

    标签: android sqlite android-sqlite android-room


    【解决方案1】:

    我认为您想在 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)
    

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 2015-08-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 2018-06-17
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多