2015-04-05 65 views
0

我正在使用SQL,并且遇到了错误ORA-02270。没有与此列列表匹配的唯一键或主键:SQL

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. 

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

+0

@Farhęg,谢谢,你能给我一个我需要做什么来定义一个唯一约束的例子吗?我是新来的SQL,我不完全确定我完全理解!感谢您的快速答复! – sudobangbang 2015-04-05 22:34:05

+0

uhm,这是为mysql,sql-server和oracle吗? – Mackan 2015-04-05 22:43:57

+0

没有抱歉,只是SQL,我一定有意外点击了建议,生病的修复 – sudobangbang 2015-04-05 22:44:26

回答

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) 
); 

这可以让你从你的表中的多个领域,并与另一个表匹配的字段连接两个(一起)。

1

手段正是它说......在:-)

一些模糊的方式在this page MySQL的医生说:

建议您使用只引用键外键是 都UNIQUE(或PRIMARY)和NOT NULL。

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

员工(性别)会相同。

+0

我以为这就是我所做的,将它声明为主键,还是因为它是一个复合键,所以年龄实际上不是主键,而是年龄和性别的组合是一个复合键? – sudobangbang 2015-04-05 22:50:32

+0

我如何将年龄/性别定义为独特?即时通讯新的SQL语法? – sudobangbang 2015-04-05 22:54:22

+0

CONSTRAINT uc_gender UNIQUE(年龄,性别) – sudobangbang 2015-04-05 22:55:42

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) 

);

相关问题