【问题标题】:column "parent_id" referenced in foreign key constraint does not exist when creating SQL table创建 SQL 表时外键约束中引用的列 \"parent_id\" 不存在
【发布时间】:2023-01-25 21:05:04
【问题描述】:

我是 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

【问题讨论】:

标签: sql postgresql create-table


【解决方案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)
);

这就是它不起作用的原因。

【讨论】:

    【解决方案2】:

    像这样

    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)
    );
    

    【讨论】:

      【解决方案3】:

      要添加没有代码 sn-p 的答案:

      FOREIGN KEY (parent_id) REFERENCES Customer(id) 你的想法是对的。此位向您的表添加 constraint 或“规则”。此约束确保 parent_id 在您的 Customer 表中拥有一个真实的 id

      错误消息告诉我们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
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        • 2016-01-15
        • 2019-01-04
        • 1970-01-01
        • 1970-01-01
        • 2017-03-11
        • 2012-09-07
        相关资源
        最近更新 更多