ORA-00904,代码新手 我需要帮助来确定问题所在

ORA-00904, Code Newbie I need help in identifying what's wrong

CREATE TABLE TASK_SKILL (TASK_ID INT REFERENCES PROJECT_SCHEDULE_TASK(TASK_ID),
                SKILL_ID INT REFERENCES PROJECT(PROJECT_ID),
                NUMBER_OF_EMPLOYEES INT,
                PRIMARY KEY (TASK_ID, PROJECT_ID, SKILL_ID));

美好的一天,我知道我的问题似乎很新手,对在座的大多数人来说都是常识,但我仍在努力学习 SQL

我遇到了“ORA-00904:“PROJECT_ID”:无效标识符。

我已经检查过了,看起来我有一个 Project_ID 列,但我仍然无法 运行 它。

您正在创建具有 3 个字段的 table TASK_SKILL:TASK_ID、SKILL_ID 和 NUMBER_OF_EMPLOYEES。您还想通过 TASK_ID、PROJECT_ID、SKILL_ID 创建主键。 Oracle 是对的,您的 table 中没有 PROJECT_ID 字段。 您的字段名为 SKILL_ID,因此应使用它创建主键,如下所示:

CREATE TABLE TASK_SKILL (TASK_ID INT REFERENCES PROJECT_SCHEDULE_TASK(TASK_ID),
                SKILL_ID INT REFERENCES PROJECT(PROJECT_ID),
                NUMBER_OF_EMPLOYEES INT,
                PRIMARY KEY (TASK_ID, SKILL_ID));

在 table 的 PK 中,您只能包含来自 table 的字段,而不包含来自相关 table 的字段。因此,无需包含引用的 PROJECT_ID.

发生这种情况是因为您试图创建一个 table,其中的列不存在,在本例中为 PROJECT_ID。在 TASK_SKILL Table 中,您只定义了 3 列:

  1. TASK_ID,这是PROJECT_SCHEDULE_TASKtable
  2. 的外键
  3. SKILL_ID,这是PROJECT的外键table。
  4. NUMBER_OF_EMPLOYEES 这是一个整数。

尝试像这样创建 table:

CREATE TABLE TASK_SKILL (TASK_ID INT REFERENCES PROJECT_SCHEDULE_TASK(TASK_ID),
                SKILL_ID INT REFERENCES PROJECT(PROJECT_ID),
                NUMBER_OF_EMPLOYEES INT,
                PRIMARY KEY (TASK_ID, SKILL_ID));

最后,如果你刚开始学习SQL,你可以先打好数据库设计的基础再去hands-on。

oracle documentation of foreign keys