【问题标题】:Error: Column doesn't exist in table (Foreign Key referencing)错误:表中不存在列(外键引用)
【发布时间】:2016-03-29 15:25:30
【问题描述】:

问题
我正在尝试将 Customer 表中的 ID 列链接到 Purchases 表中的 C_ID。我还在学习 SQL,所以我的知识很浅,不知道为什么会发生这个错误。如果有人可以提供解决方案并指出我出错的地方,那就太好了。

错误信息

SQL 代码

CREATE TABLE Customer (

ID INTEGER,
Firstname VARCHAR (15),
Lastname VARCHAR (15),
Address VARCHAR (254),
Postcode VARCHAR (8),
Email VARCHAR (254),
Phoneno INTEGER,
Points INTEGER,
PRIMARY KEY (ID)
);

CREATE TABLE Purchases (

C_ID INTEGER,
GameName VARCHAR(30),
ConsoleType VARCHAR (20),
Price VARCHAR (254),
PaymentType VARCHAR (20),
Date TIMESTAMP,
PointsGained INTEGER,
PRIMARY KEY (C_ID),
FOREIGN KEY (ID) REFERENCES Customer(ID)
);

【问题讨论】:

  • 错误消息有时非常具体。这是其中之一。如果你想成为一名程序员,阅读和解释错误信息是你需要的技能。这一篇是如此清晰和具体,以至于它表明你可能根本没有读过它。话虽如此,有时信息是模糊的,但这是另一回事。

标签: mysql sql sql-scripts


【解决方案1】:

我认为你放错了主键和外键列,你也没有添加采购表主键列

CREATE TABLE Purchases 
(
ID INTEGER, -- Primary key column 
C_ID INTEGER,
GameName VARCHAR(30),
ConsoleType VARCHAR (20),
Price VARCHAR (254),
PaymentType VARCHAR (20),
Date TIMESTAMP,
PointsGained INTEGER,
PRIMARY KEY (ID),
FOREIGN KEY (C_ID) -- Replace ID with C_ID
    REFERENCES Customer(ID)  
);

【讨论】:

  • 领先我一秒 :-)
  • @ZoharPeled - 哈哈,我们俩也有相似的想法:P
【解决方案2】:

Purchases 表中没有名为 ID 的列。
在我看来应该是这样的:

CREATE TABLE Purchases (
    ID INTEGER,
    C_ID INTEGER,
    GameName VARCHAR(30),
    ConsoleType VARCHAR (20),
    Price VARCHAR (254),
    PaymentType VARCHAR (20),
    Date TIMESTAMP,
    PointsGained INTEGER,
    PRIMARY KEY (ID),
    FOREIGN KEY (C_ID) REFERENCES Customer(ID)
);

所以ID 列是主键,C_ID 列是客户的外键。

【讨论】:

    猜你喜欢
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2017-11-05
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多