Ir ao conteúdo
  • Cadastre-se

Ajuda - Unir dados em um select


cyaros

Posts recomendados

Ola galera do forum. Estou com uma duvida em um select e nao to conseguindo achar um jeito de fazer. bom vamos la.

eu tenho 3 tabelas

telefone (codTelefone, ddd, numero, tipo, codPessoa) codPessoa fk Pessoa

Pessoa (codPessoa, nome)

Funcionario (codPessoa, nivel, senha, usuario) essa seria uma especializacao da tabela pessoa.

bom mas a duvida é essa se eu fizer um select na tabela pessoa inner join telefone eu vou ter 2 resultados da mesma pessoa, um resultado do telefone tipo (celular) e outro do tipo (fixo). Nao sei se deu pra entender.

esse é o select que eu fiz

select * from funcionario inner join pessoa on pessoa.codPessoa = funcionario.codPessoa inner join telefone on telefone.codPessoa = pessoa.codPessoa

tenho 2 resultados da pessoa

codPessoa | nome | tipo Fone

-------------------------------

1 | Thiago | celular

1 | Thiago | fixo

-------------------------------

qual é o código ou o que devo pesquisar pra colocar em uma unica linha esses resultados ficado mais ou menos assim

codPessoa | nome | tipo Fone

1 | Thiago | celular | fixo

desde ja muito obrigado.

Link para o comentário
Compartilhar em outros sites


Select * from funcionario
inner join pessoa on pessoa.codPessoa = funcionario.codPessoa
inner join telefone on telefone.codPessoa = pessoa.codPessoa [B]GROUP BY funcionario.codPessoa [/B]

Bom, use o group by como no exemplo.

Só não entendi o porque dessa tabela Funcionario e da tabela pessoa, se a relação delas for de 1 para 1, creio que o certo seria você ter apenas uma tabela, sei lá. Se for 1 para n, aí tudo bem. Mas como disse, não entendi o que é, e não é esse o assunto. ^^

Link para o comentário
Compartilhar em outros sites


Select * from funcionario
inner join pessoa on pessoa.codPessoa = funcionario.codPessoa
inner join telefone on telefone.codPessoa = pessoa.codPessoa [B]GROUP BY funcionario.codPessoa [/B]

Bom, use o group by como no exemplo.

Só não entendi o porque dessa tabela Funcionario e da tabela pessoa, se a relação delas for de 1 para 1, creio que o certo seria você ter apenas uma tabela, sei lá. Se for 1 para n, aí tudo bem. Mas como disse, não entendi o que é, e não é esse o assunto. ^^

Erciley Junior pelo que eu entendi do group by ele acumula dados quando eu uso SAM, AVG, MAX, MIN... mas o que eu estou tentando é fazer ter o telefone fixo e o celuar na mesma linha e sem repetir o usuario.

as tabelas que criei são: telefone, pessoa e funcionário mas funcionário não se relaciona é so uma especialização de pessoa.

telefone

codTelefone | tipo | numero | ddd | codPessoa

1 | celular | 9999-9999 | 43 | 1

2 | fixo | 3333-3333 | 43 | 1

3 | celular | 9999-8888 | 43 | 2

4 | fixo | 3333-4444 | 43 | 2

pessoa

codPessoa | nome

1 | jose dos santos

2 | pedro da silva

Funcionario

codPessoa | Usuario | senha | nivel

1 | jose | 123 | Usuario

2 | pedro | 456 | Administrador

eu queria uma saida mais ou menos assim

codPessoa | nome | Usuario | Senha | nivel | ddd | numero | tipo | ddd | numero | tipo

1 | jose dos santos | jose | 123 | Usuario | 43 | 3333-3333 | fixo | 43 | 9999-9999 | celular

2 | Pedro da silva | pedro | 456 | administrador | 43 | 3333-4444 | fixo | 43 | 9999-8888 | celular

Link para o comentário
Compartilhar em outros sites

  • Moderador

você pode resolver isso de forma mais simples para a consulta depois.

crie uma VIEW usando a instruçao assim:

create VIEW nomeDaview AS sua consulta

a funçao da view é trabalhar com multiplas tabelas a nivel de tabela. ou seja.. você pode jogar os dados em um "tabelao" .. lembrando que isso é bastante util quando tem um grande numero de dados pesquisados sobre alguma determinada coisa.

Link para o comentário
Compartilhar em outros sites

Cyaros, o GROUP BY não serve apenas quando há funções de agrupamento. Nesse seu caso, ele vai impedir que o código do funcionário se repetida, agrupando os semelhantes.

Agora entendi o que você quer fazer.

Sem o GROUP BY, iria apresentar duas vezes o funcionário X, exibindo em uma linha um telefone, e em outra, outro telefone. Exibir isso em uma coluna só, talvez tenha como, vou fazer uns testes pra ver se posto um comando exato.

Mas isso seria malabarismo demais.... ^^

Se isso é informação para se exibir em algum sistema, o certo e mais fácil seria você fazer esse tratamento no seu sistema, mas.....

E mais uma vez, não vejo o porque dessas duas tabelas, creio que o melhor seria uma delas ter mais campos, para salvar essas "especialidades" do funcionário, casa haja.

Separar cada telefone do cliente, em uma coluna, apenas com comando sql, não sei fazer, a não ser que tenha como criar um vetor em mysql, que também nunca pesquisei.

Uma coisa que dá para fazer, é o seguinte:

SELECT P.CODPESSOA,P.NOME,GROUP_CONCAT( CONCAT( TRIM(T.TIPO) , ': ' , TRIM(T.DDD) , '-' , TRIM(T.CODTELEFONE) ) SEPARATOR ' *** ' ) FROM PESSOA AS P
INNER JOIN TELEFONE AS T ON T.CODPESSOA = P.CODPESSOA
GROUP BY P.CODPESSOA

Teste para ver o resultado... em uma LP, daria para você tratar essa string e separar em colunas distintas em um vetor.

Link para o comentário
Compartilhar em outros sites

  • Moderador

só tem sentido o uso dessas duas tabelas se caso ele queira normalizar o banco.. usando as regras de normalizaçao.

tem uma regra da normalizaçao que fala pra dividir as tabelas... mas nao sei se é nesse caso.. porque como sao estão poucos dados.. que poderia por em uma tabela só como sugeriu o amigo ali

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!