我有一个包含产品描述的表格,每个产品描述都有一个product_id和language_id。我想要做的是用 a language_idof更新所有字段,2使其product_id与language_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)
试一试 !!!
| 归档时间: |
|
| 查看次数: |
70402 次 |
| 最近记录: |