【问题标题】:Key column does not exist in table. SQL表中不存在键列。 SQL
【发布时间】:2019-04-05 12:37:34
【问题描述】:

所以我尝试查找其他问题并尝试了它们,但我无法弄清楚为什么我的 SQL 不起作用。它一直说 DepartmentID 表不存在,我已将其声明为 Department 下的主键。

CREATE TABLE EMPLOYEE(
SSN INT NOT NULL,
WorkID INT NOT NULL,
BirthDate DATE NOT NULL,
Name VARCHAR(20) NOT NULL,
UNIQUE(WorkID),
PRIMARY KEY(SSN),
FOREIGN KEY(DepartmentID) REFERENCES DEPARTMENT(DepartmentID),
FOREIGN KEY(DeviceID) REFERENCES DEVICE(DeviceID)
);

CREATE TABLE DEPARTMENT(
DepartmentID INT NOT NULL,
DepartmentName VARCHAR (20) NOT NULL,
PRIMARY KEY(DepartmentID),
UNIQUE(DepartmentName)
);

CREATE TABLE PRODUCT(
ProductID INT NOT NULL,
Name VARCHAR(20) NOT NULL,
Isle VARCHAR(5) NOT NULL,
Company VARCHAR(20) NOT NULL,
PRIMARY KEY(ProductID),
FOREIGN KEY(DepartmentID) REFERENCES DEPARTMENT(DepartmentID)
);


CREATE TABLE DEVICE(
DeviceID INT NOT NULL,
DateReceived DATE NOT NULL,
PRIMARY KEY(DeviceID)
);

CREATE TABLE SALES(
SalesID INT NOT NULL,
Profit INT NOT NULL,
Revenue INT NOT NULL,
PRIMARY KEY(SalesID)
);

CREATE TABLE AmountSold(
FOREIGN KEY (SalesID) REFERENCES SALES(SalesID),
FOREIGN KEY (ProductID) REFERENCES PRODUCT(ProductID)
);

【问题讨论】:

  • 您是否尝试过在另一个语句中引用它之前创建部门表?
  • 是的,我指的部门表是 CREATE TABLE DEPARTMENT。
  • 但是在您提供的代码中,它出现在 引用它的代码之后。所以它还没有。

标签: sql ddl


【解决方案1】:

问题是您正在制作外键,但列 DepartmentID 在您引用的那个表上不存在,第二个是 您的订单不正确。

CREATE TABLE DEPARTMENT(
DepartmentID INT NOT NULL,
DepartmentName VARCHAR (20) NOT NULL,
PRIMARY KEY(DepartmentID),
UNIQUE(DepartmentName)
);

CREATE TABLE DEVICE(
DeviceID INT NOT NULL,
DateReceived DATE NOT NULL,
PRIMARY KEY(DeviceID)
);

CREATE TABLE EMPLOYEE(
SSN INT NOT NULL,
WorkID INT NOT NULL,
BirthDate DATE NOT NULL,
DepartmentID INT NOT NULL,
DeviceID INT NOT NULL,
Name VARCHAR(20) NOT NULL,
UNIQUE(WorkID),
PRIMARY KEY(SSN),
FOREIGN KEY(DepartmentID) REFERENCES DEPARTMENT(DepartmentID),
FOREIGN KEY(DeviceID) REFERENCES DEVICE(DeviceID)
);



CREATE TABLE PRODUCT(
ProductID INT NOT NULL,
Name VARCHAR(20) NOT NULL,
DepartmentID INT NOT NULL,
Isle VARCHAR(5) NOT NULL,
Company VARCHAR(20) NOT NULL,
PRIMARY KEY(ProductID),
FOREIGN KEY(DepartmentID) REFERENCES DEPARTMENT(DepartmentID)
);




CREATE TABLE SALES(
SalesID INT NOT NULL,
Profit INT NOT NULL,
Revenue INT NOT NULL,
PRIMARY KEY(SalesID)
);

CREATE TABLE AmountSold(
FOREIGN KEY (SalesID) REFERENCES SALES(SalesID),
FOREIGN KEY (ProductID) REFERENCES PRODUCT(ProductID)
);

【讨论】:

  • 尝试在您的解决方案之前写一行并解释问题所在以及您如何修复它...
  • 非常感谢!那行得通。我不知道顺序很重要,我必须重新命名该列。
【解决方案2】:

这里的问题是您没有在Employee 表中声明DepartmentId 列。还要先执行父表,然后是引用的表

 CREATE TABLE DEPARTMENT(
 DepartmentID INT NOT NULL,
 DepartmentName VARCHAR (20) NOT NULL,
 PRIMARY KEY(DepartmentID)
 );

 CREATE TABLE DEVICE(
 DeviceID INT NOT NULL,
 DateReceived DATE NOT NULL,
 PRIMARY KEY(DeviceID)
 );

 CREATE TABLE EMPLOYEE(
 SSN INT NOT NULL,
 WorkID INT NOT NULL,
 BirthDate DATE NOT NULL,
 Name VARCHAR(20) NOT NULL,
 DepartmentID INT,
 DeviceID INT ,
 UNIQUE(WorkID),
 PRIMARY KEY(SSN),
 FOREIGN KEY(DepartmentID) REFERENCES DEPARTMENT(DepartmentID),
 FOREIGN KEY(DeviceID) REFERENCES DEVICE(DeviceID)
 );

 CREATE TABLE PRODUCT(
 ProductID INT NOT NULL,
 Name VARCHAR(20) NOT NULL,
 Isle VARCHAR(5) NOT NULL,
 Company VARCHAR(20) NOT NULL,
 DepartmentID INT,
 PRIMARY KEY(ProductID),
 FOREIGN KEY(DepartmentID) REFERENCES DEPARTMENT(DepartmentID)
 );

 CREATE TABLE SALES(
 SalesID INT NOT NULL,
 Profit INT NOT NULL,
 Revenue INT NOT NULL,
 PRIMARY KEY(SalesID)
 );

 CREATE TABLE AmountSold(
 SalesId INT NOT NULL,
 ProductId INT NOT NULL,
 FOREIGN KEY (SalesID) REFERENCES SALES(SalesID),
 FOREIGN KEY (ProductID) REFERENCES PRODUCT(ProductID)
 );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 2014-11-18
    • 2023-01-25
    • 1970-01-01
    相关资源
    最近更新 更多