如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误

Posted

技术标签:

【中文标题】如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误【英文标题】:how to fix "ORA-02270: no matching unique or primary key for this column-list " error in sql 【发布时间】:2019-04-26 14:30:21 【问题描述】:

问题出现在 FLIGHT 表中,

create table LOCATION (  
  airportCode   VARCHAR2(10) not null,  
  country       VARCHAR2(15) not null,  
  address       VARCHAR2(50) not null,  
  PRIMARY KEY(airportCode));

create table ROUTE (  
  routeID           VARCHAR2(10) not null,  
  airportCode       VARCHAR2(10) not null,  
  description       VARCHAR2(100) not null,  
  PRIMARY KEY(routeID, airportCode),
  FOREIGN KEY(airportCode) REFERENCES LOCATION(airportCode));

create table NEACC (  
  memberID          VARCHAR2(20),  
  flightGoldpoints  NUMBER,  
  PRIMARY KEY(memberID));

create table STAFF (  
  staffID           VARCHAR2(20) not null,  
  memberID          VARCHAR2(20) not null,
  name              VARCHAR2(20) not null,
  address           VARCHAR2(50) not null,
  email             VARCHAR2(30) not null,  
  phone             NUMBER not null,
  passportNum       NUMBER not null,
  PRIMARY KEY(staffID),
  FOREIGN KEY(memberID) REFERENCES NEACC(memberID));

create table FLIGHT (   
  flightID          VARCHAR2(20) not null,   
  routeID           VARCHAR2(20) not null,   
  staffID           VARCHAR2(20) not null, 
  captainOrFirstOfficer VARCHAR2(15) CHECK (captainOrFirstOfficer IN ('captain', 'first officer')) not null,
  estDepartDateTime VARCHAR2(20) not null,   
  actDepartDateTime VARCHAR2(20) not null,   
  actArriveDateTime VARCHAR2(20) not null, 
  avgSpeed          NUMBER not null, 
  avgHeight         NUMBER not null, 
  estDuration       NUMBER not null, 
  estFuel           NUMBER not null, 
  PRIMARY KEY(flightID, routeID), 
  FOREIGN KEY(routeID) REFERENCES ROUTE(routeID), 
  FOREIGN KEY(staffID) REFERENCES STAFF(staffID));

我得到的错误是“ORA-02270:此列列表没有匹配的唯一键或主键”。飞行表中正确引用了外键和主键,但我不明白为什么会出现此错误。

【问题讨论】:

【参考方案1】:

Route 表中的主键是:

PRIMARY KEY(routeID, airportCode),

正确的外键引用需要按顺序引用两者。那将是:

FOREIGN KEY(routeID, airportCode) REFERENCES ROUTE(routeID, airportCode), 

但是,FLIGHT 没有airportCode,所以这不起作用。

我不确定您要采取什么方向 - 从主键中删除 airportCode 或将其添加到 Flight 表中。但这是你的问题。

【讨论】:

但是当我尝试将数据插入航班时,它发出另一个错误insert into FLIGHT values ('flight1234', 'route1234', 'code1234', 'staff1234', 'captain', '24/4/2019', '24/4/2019', '25/4/2019', '180', '15000', '10', '50'); 错误是“ORA-02291:完整性约束(SQL_QKKKEDABZPGUNMQKZFLIVQIGO.SYS_C0014051958)违反 - 父键不发现 ORA-06512:在“SYS.DBMS_SQL”,第 1721 行 @anu 。 . .这个问题是关于你的数据模型的,这是不正确的。如果 -- 在修复之后 -- 您还有关于插入数据的问题,那么您应该在 question 而不是 comment 中提出这个问题。

以上是关于如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误的主要内容,如果未能解决你的问题,请参考以下文章

“如何修复 oracle pl/sql 中的触发器?

如何修复 laravel 5.5 中的查询生成器错误 sql 注入 *

如何修复 SQL Server 查询中的排序规则冲突?

如何修复“java.sql.SQLSyntaxErrorException:'字段列表'中的未知列'product0_.return_policy'”异常?

如何在 sql*plus 中修复我的假脱机 csv 文件中的格式

如何修复 sql 中的“ORA-02270:此列列表没有匹配的唯一键或主键”错误