MySQL - 使用INNER SELECT进行UPDATE

4

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

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

错误提示为: #1093 - 无法在 FROM 子句中指定更新目标表 'p2'
问题在于我在表中有一个制造商字段,但一些制造商的名称在 product_name 字符串中而不是制造商字段中,因此我必须通过 product_name 获取制造商 id 并更新产品表中的制造商 id。
我可以分两步完成此操作,但我想一次性完成。

p.id = p2.id 中的 p2 是什么? - Sunil Kumar B M
4个回答

6

请尝试这个查询 -

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

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

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

3

我认为你需要通过一系列语句来重写你的单个语句,或许可以使用Cursors - Alexander Pavlov

1

以下是一个有效的表格示例:

该语句将所有AKTIV记录移动到DEAKTIV,其中已经存在匹配的DRAFT记录:

update table1 fa inner join table1 fe on (fa.datum = fe.datum and fa.firmenid = fe. firmenid and  fe.status = 'DRAFT')
set fa.status = 'DEACTIV'
where fa.firmenid = '+49151506292' and fa.status = 'ACTIV';

执行上述语句后,我只需将草稿记录更新为活动记录并提交。

0

看看这种查询是否适合你

UPDATE products p2 INNER JOIN manufacturers m ON m.product_id = p2.id AND p2.name LIKE CONCAT('%',m.name,'%') SET manufacturer = YOURVALUE

你可能需要修改上面的查询,因为它是基于我的假设编写的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接