【问题标题】:MySQL - update values in table returned from query?MySQL - 更新从查询返回的表中的值?
【发布时间】:2019-09-05 07:09:44
【问题描述】:

我在连接两个表并输出两个表的一些列时触发了这个查询:

SELECT B.option_id, B.product_id, A.title, B.identifier 
FROM `catalog_product_option_title` A JOIN
     `catalog_product_option` B
     ON A.option_id = B.option_id
WHERE A.title = "Breite"

结果:

现在我需要在结果中的identifier 列上输入示例值xyz,无处不在。我会继续手动执行此操作。

如何使用 MySQL 中的 update 语句来解决这个问题,而无需手动更改?

我试过这样:

UPDATE `catalog_product_option`
SET identifier = 'xyz'
WHERE option_id IN (
    SELECT A.option_id 
    FROM `catalog_product_option_title` A 
    JOIN
         `catalog_product_option` B
         ON A.option_id = B.option_id
    WHERE A.title = "Breite"
)

但是这个查询的模拟返回,这将改变 0 行。

更新

我在没有模拟的情况下调用了sql,现在我得到了这个错误:

1093 - 表“catalog_product_option”被指定了两次,既作为“更新”的目标,又作为数据的单独源

【问题讨论】:

标签: mysql join sql-update


【解决方案1】:

您可以将查询重写为JOIN

UPDATE `catalog_product_option` B
JOIN `catalog_product_option_title` A ON A.option_id = B.option_id
SET B.identifier = 'xyz' WHERE A.title = "Breite"

【讨论】:

  • 哇,我不知道我们可以在 UPDATE 中使用 JOIN,谢谢!
  • @Black 是的,这很酷。 manual 中有一些关于它的信息,但它的文档记录并没有尽可能好。它也应该比嵌套子查询更有效。
【解决方案2】:

你可以试试这样吗?

UPDATE `catalog_product_option`
SET identifier = 'xyz'
WHERE option_id IN (
    SELECT option_id FROM (SELECT A.option_id 
    FROM `catalog_product_option_title` A 
    JOIN
         `catalog_product_option` B
         ON A.option_id = B.option_id
    WHERE A.title = "Breite") as x
)

【讨论】:

    猜你喜欢
    • 2014-11-16
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2014-09-27
    • 2015-12-18
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多