SQL如何通过关联两张表的数据更新user_workplace表指定字段
错误原因分析
- 第一种写法报错原因:UPDATE语句未引入
users表,WHERE条件中直接引用users.id时数据库无法定位表来源,因此抛出missing FROM-clause entry for table "users"错误。 - 第二种写法返回UPDATE 0的原因:
- FROM子句中重复声明了
user_workplace表,和要更新的主表未建立关联,导致匹配逻辑完全错位 - 使用LIKE匹配时字符串末尾带了多余空格(
'John '),如果库中存储的姓名没有末尾空格,也会匹配不到结果,无模糊匹配需求时优先用等值匹配=
- FROM子句中重复声明了
正确SQL写法
写法1(PostgreSQL兼容,UPDATE FROM语法)
UPDATE public.user_workplace uw SET status = 'DISABLED' FROM public.users u WHERE uw.user_id = u.id AND u.first_name = 'John' AND u.last_name = 'Doe';
写法2(通用语法,兼容MySQL、SQL Server等绝大多数数据库)
UPDATE user_workplace SET status = 'DISABLED' WHERE user_id IN ( SELECT id FROM users WHERE first_name = 'John' AND last_name = 'Doe' );
注意事项
执行更新前建议先运行查询语句确认匹配行数,避免误改数据:
SELECT COUNT(*) AS 匹配记录数 FROM user_workplace uw JOIN users u ON uw.user_id = u.id WHERE u.first_name = 'John' AND u.last_name = 'Doe';
内容的提问来源于stack exchange,提问作者Artur Dino
相关产品推荐
相关产品推荐

