【问题标题】:query not working for foreign key as a composite primary key of another table oracle SQL查询不适用于外键作为另一个表 oracle SQL 的复合主键
【发布时间】:2016-01-01 02:32:43
【问题描述】:

我正在尝试为 SQL Oracle 中的关联实体添加两个外键。我从另一个表中引用的主键是复合主键。当我尝试输入 SQL 时,它说

此列列表没有匹配的唯一键或主键

我用来创建 tbl_customer 的代码

 CREATE TABLE tbl_Customer(
customer_id     NUMBER(4)
    CONSTRAINT pk_customer PRIMARY KEY,
CustomerName    VARCHAR2(50) NOT NULL,
Telephone       VARCHAR2(10),
CusEmail        VARCHAR2(20),
    CONSTRAINT cus_email UNIQUE(CusEmail),

location_id     NUMBER(4)
    CONSTRAINT fk_location_id references tbl_Location(location_id));

用于创建 tbl_Vehicle 的 SQL

CREATE TABLE tbl_Vehicle(
   vehicle_id   NUMBER(4),
   PlateNo      VARCHAR2(10),
    CONSTRAINT pk_v PRIMARY KEY(vehicle_id,PlateNo),
   Brand        VARCHAR2(20),
   Model        VARCHAR2(10),
   TotalNoSeats     NUMBER(2),
   Class        VARCHAR2(4) NOT NULL,
        CONSTRAINT no_seats CHECK (TotalNoSeats<100),
     driver_id      NUMBER(4)
        CONSTRAINT fk_driveridV references tbl_Driver(driver_id),
     location_id    NUMBER(4)
        CONSTRAINT fk_locationV references tbl_Location(location_id));

关联表是

CREATE TABLE tbl_Customer_Vehicle(
customer_id NUMBER(4)
CONSTRAINT fk_customer_id references tbl_Customer(customer_id),
vehicle_id NUMBER(4)
CONSTRAINT fk_vehicle_id references tbl_Vehicle(vehicle_id)
);

错误在哪一行

 CONSTRAINT fk_vehicle_id references tbl_Vehicle(vehicle_id)
                                             *

这个错误是因为vehicle_id 是复合主键吗? 请帮忙!!

【问题讨论】:

  • 那么如何为关联表创建外键呢?
  • 子表中还需要PlateNo列
  • 您能告诉我如何正确查询子表吗
  • 您需要先在tbl_Customer_Vehicle表中添加PlateNo列
  • 你的意思是查询必须像这样 CREATE TABLE tbl_Customer_Vehicle( customer_id NUMBER(4) CONSTRAINT fk_customer_id references tbl_Customer(customer_id), vehicle_id NUMBER(4) CONSTRAINT fk_vehicle_id references tbl_Vehicle(vehicle_id), PlateNumber NUMBER (10) CONSTRAINT fk_Platen0 引用 tbl_Vehicle(PlateNumber );

标签: sql database oracle foreign-keys composite-primary-key


【解决方案1】:

您需要在tbl_Customer_Vehicle 表中添加PlateNo 列并在其上定义外键。

CREATE TABLE tbl_Customer_Vehicle
(
customer_id NUMBER(4)
CONSTRAINT fk_customer_id references tbl_Customer(customer_id),
vehicle_id NUMBER(4),
PlateNo      VARCHAR2(10),
CONSTRAINT fk_vehicle_id_PlateNo FOREIGN KEY(vehicle_id,PlateNo)
            references tbl_Vehicle(vehicle_id,PlateNo)
);

【讨论】:

  • 仍然显示此错误消息 CONSTRAINT fk_vehicle_id references tbl_Vehicle(vehicle_id), * ERROR at line 5: ORA-02270: no matching unique key or primary key for this column-list
  • 你试过我的代码了吗,我已经将它定义为这样的 CONSTRAINT fk_vehicle_id_PlateNo references tbl_Vehicle(vehicle_id,PlateNo)。您的错误消息显示fk_vehicle_id references tbl_Vehicle(vehicle_id)。请使用我的查询
  • 是的,我使用它显示此错误消息 CONSTRAINT fk_vehicle_id_PlateNo 引用 tbl_Vehicle(vehicle_id,PlateNo) * 第 7 行出现错误:ORA-00907:缺少右括号
  • 是的,它奏效了。非常感谢你。我从昨天开始试图解决这个问题。再次感谢:)
猜你喜欢
  • 1970-01-01
  • 2012-09-22
  • 2021-07-24
  • 2020-05-15
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多