不同schema下user表匹配id插入userSettings报username非空约束错误
报错原因
你触发非空约束的核心原因是误用了INSERT语句:
INSERT INTO的作用是向表中插入全新的行记录,你只给新行的userSettings字段赋值,而b.user表中username是必填的非空字段,没有给该字段赋值自然会触发约束报错,这和你原本要修改已有行的需求完全不符。
正确实现方案
你需要的是更新两张表ID匹配的已有行的字段,应该使用UPDATE语句搭配关联查询实现,不同数据库的语法略有差异:
PostgreSQL 写法
UPDATE b.user AS b_u SET "userSettings" = a_u."userSettings" FROM a.user AS a_u WHERE b_u.id = a_u.id;
MySQL 写法
UPDATE b.user b_u INNER JOIN a.user a_u ON b_u.id = a_u.id SET b_u.`userSettings` = a_u.`userSettings`;
另外你原来的查询语句里还存在笔误:关联条件里写的是b.users.id,多写了字母s,正确的表名是b.user,对应字段是b.user.id。
内容的提问来源于stack exchange,提问作者kris
相关产品推荐
相关产品推荐

