2015-04-05 78 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) 

);

相關問題