Consulta SQL em herança

6 respostas Resolvido
postgresqlsql
A

Pessoal estou tentando retornar o nome dos clientes físicos que também são jurídicos. Eu tenho uma tabela cliente e suas filhas, clienteFisico, clienteJuridico. Estou tentando fazer com OUTER JOIN mas não está dando certo, não sei se OUTER é a maneira de correta de se fazer. Alguém tem uma dica, solução, ajuda. Agradeço a qualquer resposta.

6 Respostas

J

Pra unir as duas visões entre física/jurídica das tabelas acredito que você precisaria de um UNION.

L

Como é o relacionamento entre essas tabelas? Acho que um simples inner join resolve, mas é bom ver esses relacionamentos para ter certeza.

A
CREATE TABLE cliente (
idCliente INTEGER NOT NULL,
loginCliente VARCHAR (30) NOT NULL,
emailCliente VARCHAR (30) NOT NULL,
nomeCliente VARCHAR (150) NOT NULL,
senhaCliente VARCHAR (50) NOT NULL,
cepCliente VARCHAR (9) NOT NULL,
bairroCliente VARCHAR (150) NOT NULL,
cidadeCliente VARCHAR (150) NOT NULL,
estadoCliente VARCHAR (50) NOT NULL,
enderecoCliente VARCHAR (150) NOT NULL,
CONSTRAINT pk_cliente PRIMARY KEY (idCliente)

);

CREATE TABLE clienteFisico (
cpfCliente VARCHAR (11) NOT NULL,
idCliente INTEGER NOT NULL,
CONSTRAINT fk_clientef FOREIGN KEY (idCliente) REFERENCES cliente (idCliente),
CONSTRAINT pk_clifisico PRIMARY KEY (cpfCliente, idCliente)

);

CREATE TABLE clienteJuridico (
cnpjCliente VARCHAR (20) NOT NULL,
idCliente INTEGER NOT NULL,
CONSTRAINT fk_clientej FOREIGN KEY (idCliente) REFERENCES cliente (idCliente),
CONSTRAINT pk_clientejuridico PRIMARY KEY (cnpjCliente, idCliente)

);
Estas são as tabelas, uma generalização/especialização, tentei fazer com um inner join mas não consegui, fiz com subconsulta mas não ficou certo o retorno rs, estou pesquisando agora sobre o union da resposta acima, ainda sou um aprendiz acho que dará para perceber na sql das tabelas rsrs. Agradeço a atenção.

L
Solucao aceita
SELECT
	c.nomeCliente
FROM
	cliente c
	INNER JOIN clienteFisico cf ON cf.idCliente = c.idCliente
	INNER JOIN clienteJuridico cj ON cj.idCliente = c.idCliente
A

Agradeço a instrução @Jonathan_Medeiros, muito obrigado pela atenção e ajuda.

A

Obrigado @Lucas_Camara resolveu meu problema, de fato parece ser um simples Join, mas não consegui pensar assim. Muito obrigado pela ajuda e atenção, aprendi mais um pouco :slight_smile: .

Criado 7 de junho de 2019
Ultima resposta 8 de jun. de 2019
Respostas 6
Participantes 3