MySQL - 使用 INNER SELECT 进行更新

4 mysql select sql-like

我想做这样的事情,但似乎我做不到:

UPDATE products p2
SET
manufacturer = 
(
SELECT manufacturer
FROM products p, manufacturers m, etc.
WHERE
...other stuff...
p.name LIKE CONCAT('%',m.name,'%')    
AND p.id = p2.id
)
WHERE manufacturer = 0
Run Code Online (Sandbox Code Playgroud)

错误是:#1093 - 您无法在 FROM 子句中指定用于更新的目标表“p2”

问题是我的表中有一个制造商字段,但一些制造商名称位于product_name-string而不是制造商字段中,所以我必须通过product_name获取制造商id并更新其制造商的产品表ID。

我可以分两步完成,但我喜欢一步完成。

Dev*_*art 6

尝试这个查询 -

UPDATE products p
  JOIN manufacturers m
    ON LOCATE(p.name, m.name) > 0
SET p.manufacturer = m.id;
Run Code Online (Sandbox Code Playgroud)

...但首先检查记录是否正确连接 -

SELECT * FROM products p
  JOIN manufacturers m
    ON LOCATE(p.name, m.name) > 0 -- bind records in two tables
Run Code Online (Sandbox Code Playgroud)