SQL 外键错误,指出父键不存在,但我已检查它是

问题描述 投票:0回答:1

向该表添加外键时出现错误:

第 2/16 行错误:ORA-02298:无法验证 (.FK_PATIENT_APPOINTMENT) - 未找到父密钥

这是我正在使用的 SQL:

ALTER TABLE Patient
    ADD CONSTRAINT fk_patient_appointment
        FOREIGN KEY (Appointment_ID)
        REFERENCES Appointment(Appointment_ID);

表格是使用以下方式创建的:

CREATE TABLE Appointment 
(
    Appointment_ID INT,
    AppointmentDate DATE,
    AppointmentTime TIMESTAMP,
    AppointmentLocation VARCHAR2(255),
    Nurse_ID INT,
    Intervention_ID INT,
    PRIMARY KEY (Appointment_ID)
);

CREATE TABLE Patient 
(
    Patient_ID INT,
    PatientFirstName VARCHAR2(50),
    PatientLastName VARCHAR2(50),
    PatientDOB DATE,
    PatientContact VARCHAR2(20),
    PatientAddress VARCHAR2(255),
    PatientGP VARCHAR2(50),
    PatientAlert VARCHAR2(255),
    Appointment_ID INT,
    PRIMARY KEY (Patient_ID)
);

我删除了

Patient
表,以确保它与此处的代码完全相同。

以下是我尝试添加的外键;只有带有

Patient
的那些才无法正常工作。我无法在保存的创建的表中手动添加外键。

-- This causes the error
ALTER TABLE PATIENT 
    ADD CONSTRAINT fk_appointment_id
        FOREIGN KEY (Appointment_ID)
        REFERENCES Appointment (Appointment_ID);

非常感谢任何帮助,谢谢

我知道这是基本的 SQL 编码,但我只需要通过我的作业并显示有效的 SQL,这样我就可以查询表!

任何帮助将不胜感激,因为我在其他地方找不到答案

sql oracle oracle-apex
1个回答
0
投票

您的代码有效。 小提琴


您似乎已在创建约束之前将数据放入表中。

要么:

  1. 清空桌子:

    TRUNCATE TABLE patient;
    
    
  2. 删除

    appointment

    表中没有匹配值的行。

    DELETE FROM patient p WHERE NOT EXISTS (SELECT 1 FROM appointment a WHERE a.Appointment_ID = p.Appointment_ID);
    
    
  3. 或者将预约插入

    appointment

    表中,以查找所有错过预约的患者。

然后您的约束将被创建,您可以尝试

INSERT

将数据放回表中(前提是约束有效)。

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.