基于同一张表的UPDATE表

nat*_*cht 14 mysql update

我有一个包含产品描述的表格,每个产品描述都有一个product_idlanguage_id。我想要做的是用 a language_idof更新所有字段,2使其product_idlanguage_idis相同1

到目前为止,我已经尝试了以下查询,但是我收到的错误表明 MySQL 不想更新在子查询中也使用了该表的表。

UPDATE
  products_description AS pd
SET 
  pd.products_seo = (
    SELECT
      pd2.products_seo
    FROM 
      products_description AS pd2
    WHERE
        pd2.language_id = 1
    AND pd2.products_id = pd.products_id
  )
WHERE
  pd.language_id <> 1
Run Code Online (Sandbox Code Playgroud)

在 MySQL 中是否有“简单”的方法来解决这个限制?还是有什么“技巧”?我有点惊讶我的查询不起作用,因为这似乎是合乎逻辑的。

Rol*_*DBA 22

这是相当冒险的业务,我可以理解为什么。它与 MySQL 处理子查询的方式有关。我在 2011 年 2 月 22 日写回了它:MySQL 子查询问题

执行涉及 SELECT 和子查询 SELECT 的 JOIN 是可以的。另一方面,UPDATEs 和 DELETE 可能是一个相当不死的冒险。

建议

尝试重构查询,使其成为两个表的 INNER JOIN

UPDATE
    products_description pd INNER JOIN products_description pd2 ON
    (pd.products_id=pd2.products_id AND pd2.language_id=1 AND pd.language_id<>1)
SET pd.products_seo = pd2.products_seo;
Run Code Online (Sandbox Code Playgroud)

试一试 !!!