有没有办法使以下的SQL查询工作?

时间:2013-10-26 17:48:18

标签: sql database postgresql

我正在尝试使用以下SQL创建两个表:

create table student(sid char(20) primary key,name char(20),age int,hours char(10) references courses(cid));                     

create table courses(cid char(10),cname char(10),grader char(20) references student(sid));

但是我收到以下错误:

  

1:错误:关系“课程”不存在   3:错误:关系“学生”不存在

有没有办法或语法可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

不是与具有References简写的表同时创建外键约束,而是可以使用Alter Table Add Constraint命令添加其中一个或两个。 See the Alter Table page in the PostgrSQL manual here.

正如mu指出的那样,外键的目标必须定义UniquePrimary Key约束,因此我在下面的示例中的cid列中添加了该约束

在您的情况下,它可能看起来像这样:

create table student(sid char(20) primary key,name char(20),age int,hours char(10));                     
create table courses(cid char(10) primary key,cname char(10),grader char(20));

Alter Table student Add Constraint fk_student_hours_cid Foreign Key (hours) References courses(cid);
Alter Table courses Add Constraint fk_courses_grader_sid Foreign Key (grader) References student(sid);

答案 1 :(得分:2)

您需要先创建表(不带REFERENCES子句)。之后通过语句手动创建外键ALTER TABLE mytable ADD CONSTRAINT mytablefk FOREIGN KEY ...但首先我要考虑是否确实存在从表课程到表学生之间的关系!