【问题标题】:extended update in mysqlmysql中的扩展更新
【发布时间】:2020-08-17 09:03:16
【问题描述】:

我有一个名为“products”的表和另一个名为“rates”的表,它们与“products”表具有一对多的关系。对于每个产品,我在“rates”表中有两行,我想为“rates”表中的每个“product”更新一个名为“index”的布尔列为 1。

我使用了这个查询:

UPDATE  ( SELECT 
             products.id AS productId,
             products.name ,
             X.`index` AS `index`, 
             x.id AS rateId, 
             x.price, x.discount

          FROM products JOIN ( SELECT rates.* 
                               FROM rates 
                             ) AS x

                WHERE products.id = x.product_id
                GROUP BY products.id
            ) AS y
SET y.index = 1

但我得到了这个错误消息:

SQL 错误 (1288) 更新的目标表 y 不可更新

我是 mysql 的新手,我不知道我的错误在哪里。谢谢你的帮助

产品表

| id  |  name    
| 1   |  chair
| 2   |  bench

费率表

| id  |  product_id  | index | value
|  1  |       1      |   0   |   xx   ==> index = 1
|  2  |       1      |   0   |   yy
|  3  |       2      |   0   |   zz   ==> index = 1
|  4  |       2      |   0   |   tt

我想将每个产品的索引列更新为 1

【问题讨论】:

  • 您查询的目的很不明确。你想更新哪个表,在什么条件下?请提供示例数据和所需结果以澄清您的问题。
  • 我更新了我的帖子@GMB
  • 谢谢@ali。决定rates 中的哪些行得到index = 1 的逻辑是什么?
  • 我只是在为我的 Web 应用程序创建虚假数据 :) @GMB

标签: mysql sql database select sql-update


【解决方案1】:

您似乎想为每个product_id rates 中的“第一”行添加update。如果是这样,您可以使用聚合查询自联接表,该查询计算每个 product_id 的最小值 id

update rates r
inner join (select product_id, min(id) id from rates group by product_id) r1 
    on r1.id = r.id
set r.index = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多