Erro consulta MySql

Estou tentando fazer uma consulta no MySql com varias tabelas,porem está dando um erro:
Error Code: 1066. Not unique table/alias: 'tblpessoas

Consulta sql que estou usando:

select cadastro.tblnascimento.livro, 
cadastro.tblnascimento.folha, 
cadastro.tblnascimento.termo, 
cadastro.tblnascimento.matricula, 
cadastro.tblnascimento.data_lavratura, 
cadastro.tblnascimento.decl_nasc_vivo,
cadastro.tblregistrando.cidade_registro, 
cadastro.tblregistrando.estado_registro, 
cadastro.tblregistrando.data_nascimento,
cadastro.tblregistrando.hora_nascimento,
cadastro.tblregistrando.cidade_nascimento, 
cadastro.tblregistrando.estado_nasci, 
cadastro.tblregistrando.local_nasci, 
cadastro.tblregistrando.sexo,
cadastro.tblregistrando.gemeos, 
cadastro.tblregistrando.matricula_gemeo,
cadastro.tblpessoas.nome_pessoa, 
cadastro.tblpessoas.nome_pai, 
cadastro.tblpessoas.nome_mae,
cadastro.tblregistrando.nome
from cadastro.tblnascimento
inner join cadastro.tblregistrando on cadastro.tblregistrando.id = cadastro.tblnascimento.id_registrando    
inner join cadastro.tblpessoas on cadastro.tblpessoas.id = cadastro.tblnascimento.id_pai    
inner join cadastro.tblpessoas on cadastro.tblpessoas.id = cadastro.tblnascimento.id_mae
where cadastro.tblnascimento.id = 5;

Acredito que este erro esteja ocorrendo por que o seu inner join com a tabela de pessoa ocorre 2 vezes, por ser assim, você deve dar apelidos diferentes para cada junção, pois da maneira que está o BD não consegue entender.

exemplo:

inner join cadastro.tblpessoas pai on pai.id = cadastro.tblnascimento.id_pai    
inner join cadastro.tblpessoas mae on mae.id = cadastro.tblnascimento.id_mae

Para facilitar mais a compreensao, vou postar a estrutura das tabelas:
CREATE TABLE tblpessoas (
id int(11) NOT NULL AUTO_INCREMENT,
nome_pessoa varchar(200) NOT NULL,
sexo varchar(20) NOT NULL,
doc_identidade varchar(30) DEFAULT NULL,
data_expedicao date DEFAULT NULL,
orgao_expeditor varchar(8) DEFAULT NULL,
cpf varchar(20) DEFAULT NULL,
estado_civil varchar(40) NOT NULL,
nacionalidade varchar(15) DEFAULT NULL,
profissao varchar(100) NOT NULL,
data_nascimento date NOT NULL,
cidade_nascimento varchar(200) NOT NULL,
estado_nascimento varchar(200) NOT NULL,
id_endereco int(11) NOT NULL,
id_certidao int(11) DEFAULT NULL,
‘nome_pai’ varchar(200) DEFAULT NULL,
‘nome_mae’ varchar(200) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=63 DEFAULT CHARSET=utf8;

CREATE TABLE tblnascimento (
id int(11) NOT NULL AUTO_INCREMENT,
id_selo int(11) NOT NULL,
livro int(11) NOT NULL,
folha int(11) NOT NULL,
termo int(11) NOT NULL,
matricula varchar(100) NOT NULL,
data_lavratura date NOT NULL,
decl_nasc_vivo varchar(50) NOT NULL,
id_registrando int(11) NOT NULL,
id_mae int(11) NOT NULL,
id_pai int(11) DEFAULT NULL,
PRIMARY KEY (id),
KEY fk_id_registrando (id_registrando),
KEY fk_id_mae_idx (id_mae),
KEY fk_id_pai_idx (id_pai),
CONSTRAINT fk_id_mae FOREIGN KEY (id_mae) REFERENCES tblpessoas (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_id_pai FOREIGN KEY (id_pai) REFERENCES tblpessoas (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_id_registrando FOREIGN KEY (id_registrando) REFERENCES tblregistrando (id)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

CREATE TABLE tblregistrando (
id int(11) NOT NULL AUTO_INCREMENT,
cidade_registro varchar(80) NOT NULL,
estado_registro varchar(2) NOT NULL,
data_nascimento date NOT NULL,
hora_nascimento varchar(10) NOT NULL,
nome varchar(200) NOT NULL,
cidade_nascimento varchar(80) NOT NULL,
estado_nasci varchar(4) NOT NULL,
local_nasci varchar(45) NOT NULL,
sexo varchar(20) NOT NULL,
gemeos varchar(5) NOT NULL,
matricula_gemeo varchar(100) DEFAULT ‘-----------’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;

Tentei mais não funcionou

Uma vez apelidada a tabela como o @Jonathan_Medeiros indicou, você precisa usar os apelidos em qualquer outro lugar da query…

SELECT 
    ...
    pai.nome_pessoa, -- essa ficou estranha, de quem seria?
    pai.nome_pai, 
    mae.nome_mae,
    ...

Uma observação: se a tblpessoas já possui os nomes de pai e mãe, porque usar join nesse caso se você tem tudo num único registro?

Por isso perguntei da coluna estranha lá em cima, onde você acaba perdendo o nome do filho entende?

Perceba que usando join você acaba subindo um nível na “árvore genealógica” :joy: e chegando nos avós…

Além do mais, para ficar um relacionamento “cheiroso” :joy:, o ideal seria ao invés do varchar nome_pai e nome_mae, uma coluna int para cada, por exemplo id_pai, id_mae… conhecemos isso como auto relacionamento, quando um registro da tabela referencia outro dela mesma… daí nesse caso você precisaria usar três joins, uma para a própria pessoa (filho no caso), outro para o pai e outro para mãe usando os apelidos como indicado…

1 curtida

A tabela tblpessoas possui somente cadastros pessoais, esses são utilizados nas tabelas Nascimento, que por sua vez tem uma chave estrangeira ID da tabela pessoas.