创建SQL表时,外键约束中引用的列“parent_id”不存在

时间:2017-11-07 10:47:46

标签: sql postgresql create-table

我是SQL新手并试图理解外键语法。我知道这是在多个问题中被问到的,但我发现的每个问题似乎都没有告诉我这里我做错了什么。 这是我的SQL代码:

CREATE TABLE Customer
(
id int primary key,
name varchar(30),
age int,
gender bool
);

CREATE TABLE Minor
(
FOREIGN KEY (parent_id) REFERENCES Customer(id)
);

CREATE TABLE Adult
(
FOREIGN KEY (parent_id) REFERENCES Customer(id)
);

CREATE TABLE Shop
(
id int primary key
);

CREATE TABLE Drink
(
name varchar(30) primary key
);

CREATE TABLE AlcoholicDrink
(
FOREIGN KEY (name) REFERENCES Drink(name)
);

CREATE TABLE NonAlcoholicDrink
(
FOREIGN KEY (name) REFERENCES Drink(name)
);

这是我得到的错误:

ERROR:  column "parent_id" referenced in foreign key constraint does not exist
SQL state: 42703

3 个答案:

答案 0 :(得分:1)

您需要在表格中添加字段以进行参考。像这样:

CREATE TABLE Customer
(
id int primary key,
name varchar(30),
age int,
gender bool
);

CREATE TABLE Minor
(
minor_id serial primary key,
parent_id int,
other_fields text etc.
FOREIGN KEY (parent_id) REFERENCES Customer(id)
);

这就是它无法正常工作的原因。

答案 1 :(得分:1)

喜欢这个

CREATE TABLE Customer
(
id int primary key,
name varchar(30),
age int,  
gender bool
);
CREATE TABLE Minor
(
parent_id int ,
FOREIGN KEY (parent_id) REFERENCES Customer(id)
);

答案 2 :(得分:0)

要添加答案而不仅仅是代码段:

您对FOREIGN KEY (parent_id) REFERENCES Customer(id)有了正确的想法。该位将constraint或“规则”添加到表中。此约束确保parent_id在您的id表中拥有真实的Customer

该错误消息告诉我们column "parent_id" referenced in foreign key constraint does not exist。可以理解的是,混淆是由于将约束声明误认为是列声明。

正如其他人指出的,我们需要同时声明10个外键约束和2)声明列。

CREATE TABLE Customer
(
id int primary key,
name varchar(30),
age int,  
gender bool
);
CREATE TABLE Minor
(
parent_id int, -- Declare the column
FOREIGN KEY (parent_id) REFERENCES Customer(id) -- Declare the constraint
);