PostgreSQL父子表插入报错:ERROR: syntax error at or near "int" 求解
PostgreSQL中通过父表主键向子表插入数据的正确方式
你遇到的SQL Error [42601]是因为代码误用了非PostgreSQL的语法(比如SQL Server的变量写法),PostgreSQL对变量声明、赋值的规则和你写的不一样,无法直接在普通SQL语句中使用DECLARE和@变量。以下是符合PostgreSQL语法的实现方式:
方式一:使用变量(符合你的需求)
PostgreSQL中变量必须在PL/pgSQL代码块中声明和使用,你可以用DO匿名块来实现:
DO $$ DECLARE indiaCountry int; BEGIN -- 查询Countries的id并赋值给变量 SELECT id INTO indiaCountry FROM Countries WHERE description = 'asdf'; -- 向Cities插入数据 INSERT INTO Cities (country_code_id, city_id, description) VALUES (indiaCountry, 1, 'abc'); END $$;
方式二:直接用子查询插入(更简洁)
如果不需要单独使用变量,也可以直接将子查询作为值插入,省去变量声明步骤:
INSERT INTO Cities (country_code_id, city_id, description) VALUES ( (SELECT id FROM Countries WHERE description = 'asdf'), 1, 'abc' );
额外注意事项
- 确保
Countries表中description = 'asdf'的记录唯一,否则子查询会返回多行导致插入失败;如果存在多条匹配记录,可添加LIMIT 1来指定取第一条。 - 你的表创建语句中,
Countries的主键约束名coutry_pkey拼写错误(少了个n,应为country_pkey),虽然不影响功能,但建议修正以保证命名规范。
内容的提问来源于stack exchange,提问作者Naveen Pandia
相关产品推荐
相关产品推荐

