1
resposta

Como fazer auto relacionamento MySql?

Oi gente, preciso fazer que o supervisor da tabela funcionário seja uma chave estrangeira do cpf_funcionário.

No caso precisa ser uma chave estrangeira dentro da própria tabela e usando a a própria primary key.

Como faço isto? Tentei diversas formas e sempre da o erro: Error Code: 3780. Referencing column 'cpf_supervisor' and referenced column 'cpf_func' in foreign key constraint 'supervisor' are incompatible.

Segue o código que estou tentando:

CREATE TABLE tb_func (
cpf_func INT NOT NULL,
cargo_func varchar(35) NOT NULL,
cpf_supervisor INT NULL,
PRIMARY KEY (cpf_func)
);

ALTER TABLE tb_func ADD FOREIGN KEY (cpf_supervisor) REFERENCES tb_func (cpf_func);
1 resposta

Oii Felipe, tudo bem?

Sinto muito pela demora em retornar com sua resposta, vamos lá.

Tente fazer dessa maneira:

CREATE TABLE tb_func ( 
cpf_func INT NOT NULL,
cargo_func varchar(35) NOT NULL,
cpf_supervisor INT NOT NULL, 
PRIMARY KEY (cpf_func),  
CONSTRAINT codfunc 
FOREIGN KEY (cpf_supervisor) 
REFERENCES tb_func (cpf_func) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION);

Depois insira algum dado e faz a seleção:

INSERT INTO tb_func (cpf_func, cargo_func, cpf_supervisor) VALUES (1, 'analista', '1');

SELECT * FROM tb_func; 

Espero que dê certo. Qualquer coisa me avise, tá bom? :)