You can't specify target table 'td_m_product_class' for update in FROM clause
时间: 2023-11-22 11:53:05 浏览: 98
用Verilog描述路径延迟模块.rar_specify verilog_specify语句_verilog specify_v
这个错误通常出现在MySQL中,是因为MySQL不支持在子查询中直接更新目标表。解决这个问题的一种方法是使用一个临时表来存储子查询的结果,然后再更新目标表。
例如,如果你想更新td_m_product_class表中的所有记录,让它们的parent_id等于另一个表td_m_product的某些值,你可以使用以下SQL语句:
```
CREATE TEMPORARY TABLE temp_table
SELECT product_id, parent_id
FROM td_m_product
WHERE ...
UPDATE td_m_product_class
SET parent_id = (
SELECT parent_id
FROM temp_table
WHERE temp_table.product_id = td_m_product_class.product_id
)
WHERE ...
```
这将创建一个临时表temp_table,其中包含符合条件的记录的product_id和parent_id。然后,您可以使用子查询来更新td_m_product_class中的记录,使其parent_id等于temp_table中相应的parent_id。请注意,在子查询中,我们使用了temp_table和td_m_product_class之间的连接条件来确保我们只更新正确的记录。最后,我们使用WHERE子句来指定要更新的记录的条件。
阅读全文