Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

consulta com junção de 3 tabelas ?

Estou tentando fazer uma consulta de um schema que possui 3 tabelas: Administrador, Funcionário e Cliente. Todas as 3 possuem um atributo: Data_Cadastro

A consulta retornaria o nome, a função (Admin, Funcionário ou Cliente) de todos os usuários cadastrados (sem restrição de função) no mês de janeiro, segue o meu código, não está funcionando.

Como posso fazer essa consulta ?

select Administrador.Nome as 'Administrador', Administrador.Data_Cadastro as 'Data de Cadastro', Cliente.Nome as 'Cliente', Cliente.Data_Cadastro as 'Data de Cadastro', Funcionario.Nome as 'Funcionário', Funcionario.Data_Cadastro as 'Data de Cadastro' from Administrador, Cliente, Funcionario where Administrador.Data_cadastro LIKE '%-01-%' OR  Cliente.Data_cadastro LIKE '%-01-%' OR  Funcionario.Data_cadastro LIKE '%-01-%';

também tentei com 2 Inner Joins mas não obtive nenhum resultado

select Administrador.Nome as 'Administrador', Administrador.Data_Cadastro as 'Data de Cadastro', Cliente.Nome as 'Cliente', Cliente.Data_Cadastro as 'Data de Cadastro', Funcionario.Nome as 'Funcionário', Funcionario.Data_Cadastro as 'Data de Cadastro' from Administrador inner join Funcionario on Administrador.Data_cadastro=Funcionario.Data_cadastro inner join Cliente on Cliente.Data_cadastro=Administrador.Data_cadastro where Administrador.Data_cadastro LIKE '%-01-%' OR Cliente.Data_cadastro LIKE '%-01-%' OR  Funcionario.Data_cadastro LIKE '%-01-%';

Existe uma chave estrangeira entre Administrador e Funcionário (Administrador.CPF e Funcionario.Admin_CPF) e uma entre Funcionário e Cliente (Funcionario.CPF e Cliente.Funcionario_CPF), se for de alguma ajuda ou de algum uso

agradeço desde já a compreensão e ajuda

2 respostas
solução!

Oi Aderbal,

Bom, pelo que vi você tem três tabelas para diferenciar cliente, funcionario e administrador, certo?

Talvez fosse mais simples se você tivesse apenas uma tabela, com uma coluna chamada "Tipo", para diferenciar cada registro. Assim a consulta seria muito mais fácil.

Mas se não for possível, no seu caso então você pode fazer a consulta utilizando o operador union. Na verdade seriam três selects separados, um em cada tabela, e o union juntaria os três:

SELECT 
    nome AS NOME, 
    data_cadastro AS DATA, 
    'ADMINISTRADOR' AS TIPO 
FROM 
    administrador 
WHERE 
    data_cadastro like '%-01-%' 

UNION 

SELECT 
    nome AS NOME, 
    data_cadastro AS DATA, 
    'FUNCIONARIO' AS TIPO 
FROM 
    funcionario 
WHERE 
    data_cadastro like '%-01-%' 

UNION

SELECT 
    nome AS NOME, 
    data_cadastro AS DATA, 
    'CLIENTE' AS TIPO 
FROM 
    cliente 
WHERE 
    data_cadastro like '%-01-%'

Desse jeito deve funcionar. Na verdade dá para fazer a consulta de várias maneiras distintas, sendo essa uma delas.

Bons estudos!

Funcionou certinho ! obrigado cara, salvou minha vida