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

时间:2015-04-05 22:26:42

标签: sql oracle

我正在使用SQL,我遇到错误ORA-02270。

SQL> drop table employee;

Table dropped. 

SQL> Create Table Employee(
     age          varchar(2),
     gender          char(1),
     employee_no     char(6),
         references worksite(employee_no),
     Primary Key(age, gender)
     );

Table created.


SQL> Create Table Employee_type(
     age             varchar(2)
         references Employee(age),
     gender          char(1)
         references Employee(gender),
     employee_type   Varchar(12),

     Primary Key (age, gender, employee_type)
);


ERROR at line 3:

ORA-02270: no matching unique or primary key for this column-list.

我已阅读其他帖子,但我仍然不明白这个错误?我认为这可能是因为我有一个复合键,但我引用了复合键的所有列。

3 个答案:

答案 0 :(得分:1)

完全意味着它所说的......以某种模糊的方式: - )

this page MySQL doc说:

  

建议您使用仅引用密钥的外键   都是UNIQUE(或PRIMARY)和NOT NULL。

换句话说,当您编写age varchar(2) references Employee(age)时,必须将Employee(age)定义为UNIQUE或PRIMARY KEY。

员工(性别)将是相同的。

答案 1 :(得分:0)

我认为您打算使用"复合"外键约束,具有以下语法。

CREATE TABLE Employee_type(
  age             varchar(2),
  gender          char(1),
  employee_type   Varchar(12),
  PRIMARY KEY (age, gender, employee_type),
  CONSTRAINT fk_employee FOREIGN KEY(age,gender) REFERENCES Employee(age,gender)
);

这允许您从表中获取多个字段,并将它们(一起)与另一个表中的匹配字段链接起来。

答案 2 :(得分:0)

您应该使用CONSTRAINT来设置复合外键。 我希望它适合你。

CREATE TABLE Employee_type(
  age             varchar(2),
  gender          char(1),
  employee_type   Varchar(12),
  PRIMARY KEY (age, gender, employee_type),
  CONSTRAINT fk_employee_age_gender FOREIGN KEY(age,gender) 
  REFERENCES Employee(age,gender)

);