【问题标题】:Oracle - No matching unique or primary key for this column-listOracle - 此列列表没有匹配的唯一键或主键
【发布时间】:2018-11-01 19:43:12
【问题描述】:

好的,很抱歉,如果我的代码不是最好的格式。尝试创建第二个表时出现错误。我收到此错误:ORA-02270:此列列表没有匹配的唯一键或主键。我读过其他帖子,我对我的外键有什么问题感到困惑。 E_T 中的外键是 D_ID 和 SP_ID。 D_id 引用表 d_t,SP_ID 引用表 e_t,因为它是与 E_ID 的一元关系。我相信它是员工 ID 和主管 ID。 FK 和 PK 数据类型匹配。

CREATE TABLE  D_T
(
     D_ID   INTEGER NOT NULL,
     D_Name VARCHAR(45),

     CONSTRAINT D_T_PK PRIMARY KEY (D_ID)
);

CREATE TABLE E_T
(
     E_ID   INTEGER NOT NULL,
     E_Name VARCHAR(45),
     D_ID   INTEGER,
     Salary INTEGER,
     SP_ID  INTEGER,

     CONSTRAINT E_T_PK PRIMARY KEY (E_ID),
     CONSTRAINT E_T_FK1 FOREIGN KEY (D_ID) REFERENCES D_T(D_ID),
     CONSTRAINT E_T_FK2 FOREIGN KEY (SP_ID) REFERENCES E_T(SP_ID)
);

我想指出,在 Oracle 服务器上——我的脚本的第 13 行和第 14 行,单词“KEY”不是蓝色的。我不确定这是否重要。

【问题讨论】:

    标签: sql oracle foreign-keys primary-key


    【解决方案1】:

    您为自引用引用了错误的列。所以第二个表应该看起来更像:

    CREATE TABLE E_T (
     E_ID    INTEGER NOT NULL PRIMARY KEY,
     E_Name    VARCHAR(45),
     D_ID    INTEGER,
     Salary    INTEGER,
     SP_ID    INTEGER,
     CONSTRAINT E_T_FK1 FOREIGN KEY (D_ID) REFERENCES D_T(D_ID),
     CONSTRAINT E_T_FK2 FOREIGN KEY (SP_ID) REFERENCES E_T(E_ID)
    -------------------------------------------------------^
    )
    

    【讨论】:

    • 哦!所以这很有意义。根据定义,外键必须是另一个表的主键(在这种情况下,它来自它自己的表)。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多