Postgresql关联两表列时报无匹配唯一约束错误的解决方法
PostgreSQL两表指定列关联报错解决方法
报错信息:ERROR: there is no unique constraint matching given keys for referenced table
报错核心原因
PostgreSQL的外键约束要求被引用的列必须是被引用表的主键,或者带有UNIQUE唯一约束,你当前要关联的course和student_course列都不满足该要求,且你提供的原始建表语句存在两处语法错误需要先修正。
第一步:修正建表语法错误
原始建表语句的问题:
store表的phone_number varchar定义后缺失逗号factory_production表的school_name字段缺失数据类型
修正后的建表语句参考:
CREATE TABLE store( course text, name text, surname text, phone_number varchar, id INT PRIMARY KEY ); CREATE TABLE factory_production( student_course text, school_name text, id INT PRIMARY KEY );
第二步:按需求选择关联方式
方式1:创建外键做强关联
先确定被引用的表,例如你需要让store.course引用factory_production.student_course,操作如下:
- 清理被引用列的重复数据(如果已有数据的话)
- 给被引用列添加唯一约束
ALTER TABLE factory_production ADD CONSTRAINT unique_student_course UNIQUE (student_course);
- 创建外键约束
ALTER TABLE store ADD CONSTRAINT fk_store_course FOREIGN KEY (course) REFERENCES factory_production(student_course);
如果需要反向关联,仅需调整被引用表和对应列即可。
方式2:仅查询时关联,无需强约束
不需要修改表结构,直接写JOIN查询语句即可,示例:
SELECT s.*, fp.school_name FROM store s INNER JOIN factory_production fp ON s.course = fp.student_course;
内容的提问来源于stack exchange,提问作者user16904508
相关产品推荐
相关产品推荐

