工作中遇到一个需求,现在抽象出来,简单来说,就是一个update 语句的条件是需要用select查询语句查出来的,数据如下:
需要更新p_id字段为主键id,一开始sql如下:
UPDATE test.`user` t
SET t.p_id = ( SELECT p.id FROM test.`user` p );
我这个sql是抽象出来的,实际的sql里面还有连其他的表,而且字段也不是p.id,所以不要纠结为什么不直接用 t.id放在最后。
直接报错:
查询资料后,发现有解决办法,是在update的时候使用join连表(网上一大堆说在包一层select查询的不行),正确的sql如下:
UPDATE test.`user` t
INNER JOIN test.`user` p ON t.id = p.id
SET t.p_id = p.id
成功: