工作中遇到一个需求,现在抽象出来,简单来说,就是一个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
成功:


探讨了在SQL中如何正确地使用子查询更新表字段,通过对比错误的使用方式和正确的使用JOIN的方法,详细解释了解决方案。
1648

被折叠的 条评论
为什么被折叠?



