Jump to content
Rogério Orlando

join em várias tabelas

Recommended Posts

Na SQL abaixo, quando consulto as tabelas, os registros se repetem, apresentando mais do que realmente existem.

Alguém pode auxiliar no que está errado ou o que falta para que a select retorne apenas um registro para cada documento?

Esclareço que todas as tabelas tem um campo "documento", porém ele não é chave e no retorno trouxe todos os campos de todas as tabelas e não apenas as dá SQL:

 

 

select so01.documento,so01.digito,so01.nome,so01.regional,so01.situacao,so01.observacao,so01.n_spprev,so01.averbacao,
so02.endereco, so02.numero, so02.bairro,so02.cidade,so02.cep,so02.estado,so02.aniversario,
so03.rg, so03.cpf, so03.email, 
so04.estado_civil, so04.agencia,so04.dg_agencia,so04.conta,so04.dg_conta,so04.banco,so04.ddd,so04.telefone,so04.nascimento,
so04.admissao,so04.demissao_seg,so04.admor,so04.ddd_cel,so04.celular

from so03 
inner join so01 ON so01.documento= so03.documento
inner join so02 ON so02.documento= so03.documento
inner join so04 ON so04.documento=so03.documento 
where so01.documento="68" and so01.digito="0"

 

 

Share this post


Link to post
Share on other sites
Citar

porém ele não é chave 

 

Qual é a chave das tabelas ?

Os nomes das tabelas não ajudam mas pelas colunas temos dados que podem gerar a "duplicidade" pois 

uma pessoas pode ter mais de uma conta e ou celular.

Share this post


Link to post
Share on other sites

Obrigado pelo apoio Motta.

Não tenho muito conhecimento. o banco de dados peguei do serviço para tentar desenvolver, ou seja, não o criei.

Segue uma foto com as tabelas. Nenhuma delas tem informações repetidas como comentou do celular, mas o vínculo existente entre elas é o documento e o dígito, que formam um documento tipo CPF, que não pode ser repetido na mesma tabela.

Fico no aguardo e já agradeço a tentativa.

so.jpg

Share this post


Link to post
Share on other sites

As PKs da tabela é o campo ID.

Que devem ser diferentes pelas tabelas.

Não é exibido se existe uma UNIQUE KEY para documento.

Faça um teste , para um caso "duplidado"

faça um "select * from" para cada uma das tabelas

no documento e veja o resultado.

Eu ainda aposto que a duplicidade é normal e reflete o contéudo.

 

Share this post


Link to post
Share on other sites

Boa noite Motta!

fiz as selects individualmente em cada tabela, e todas retornaram apenas um registro para cada uma.

Todas as tabelas são vinculadas a um campo documento e outro campo dígito (where so01.documento="68" and so01.digito="0"), onde repeti, como solicitado, a consulta nas tabelas so01, so02, so03 e so04, todas com o "where" acima.

Como disse, esse documento, é um tipo de CPF, não tem repetição.

 

Motta!

Poderia me explicar como funciona no meu código, o FROM so03, pois tentei trocar a tabela por uma das outras três e ele dá erro (not unique table/alias 'so...)!!!

 

select so01.documento,...
so02.endereco, ...
so03.rg, ...
so04....

from so03
inner join so01 ON so01.documento= so03.documento
inner join so02 ON so02.documento= so03.documento
inner join so04 ON so04.documento=so03.documento 
where so01.documento="68" and so01.digito="0"
 

Share this post


Link to post
Share on other sites

Motta!

Creio que resolvi. 

Constei um Group By so01.documento e trouxe apenas o que precisava.

 

Agora tenho que entender o From so03, que não consigo constar outra tabela que dá erro, conforme constei acima.

 Se puder me auxiiar fico grato.

Abraço

Share this post


Link to post
Share on other sites

Você só pode citar a tabela uma vez para citar mais de uma precisa trocar o "alias"

Por exemplo
 

select ccdeb.descri ccustodeb , cccred.descri ccustocred , c.data , c.valor
from custos c
inner join centro_custo ccdeb  ON ccdeb.cod= c.ccusto_de
inner join centro_custo cccred ON cccred.cod= c.ccusto_cred

exibir 2 Centro de custo ligados a mesma tabela

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By cesarhtc
      Boa noite, estou precisando copiar tabelas oracle, como são muitas tabelas só quero copiar somente aquelas que foram alteradas em seus registros ou estrutura no dia (diariamente).
       
      desde já agradeço.
    • By FabianoSouza
      Tenho a tabela VAGAS e a tab INSCRITOS.
       
      Preciso fazer um SELECT para retornar as Vagas e a quantidade de candidatos inscritos para cada VAGA.
       
      Fazendo isso retorna duplicidade de Vagas... :-(
       
      select V.empresa, COunt(CIV.cdVaga) AS insc from dbo.vagas AS V LEFT JOIN dbo.inscVaga AS CIV ON V.codigo = CIV.cdVaga GROUP BY V.codigo, V.empresa Como monto essa consulta??
    • By Omar~
      Estou com a tarefa de elaborar uma leitura no banco de dados e não estou conseguindo achar uma solução para a instrução de leitura.
      Basicamente tenho uma tabela que de produtos, nela tenho uma coluna para registrar o vendedor e outra para registrar o comprador assim associar esses valores com a tabela de usuários.
      Digamos assim:
      SELECT produto.id, produto.vendedor, produto.comprador, usuarios.id, usuarios.nome FROM produto INNER JOIN usuarios ON produto.vendedor = usuarios.id Com isso tenho a informação do vendedor na tabela de usuários, mas como faria para obter os dados do comprador também?
       
      Uma forma seria executar dois joins na tabela de usuários porém acho que assim me parece mais gabiarra do que o jeito mais coeso de se fazer  (e na verdade foi gabiarra sim porque não sei como proceder)
      Tipo assim:
      SELECT produto.id, produto.vendedor, produto.comprador, a.id AS a_id, a.nome AS a_nome, b.id AS b_id, b.nome AS b_nome FROM produto INNER JOIN usuarios AS a ON produto.vendedor = a.id INNER JOIN usuarios AS b ON produto.comprador = b.id Tem outro jeito? Como?
    • By Omar~
      Blz...?
      Vejamos essa query:
      SELECT postagem.id, postagem.link, postagem.autor, postagem.editor, usuario.id, usuario.nome FROM postagem INNER JOIN usuario ON postagem.autor = usuario.id Então estou buscando pelos dados da postagem e o autor da mesma.
      A questão é:
      Tenho uma tabela "postagem" que guarda informação do "autor" da postagem e quem a editou "editor"
      Com essa query consigo trazer o resultado da tabela usuario dano a referencia do autor.
      Mas como eu faria para ter os dados do "autor" e do "editor" na tabela "usuario"?
      Preciso obter os nomes de quem criou e quem editou.
    • By r.guerra
      Salve galera, boa tarde a todos.
      estou tendo um problema que ainda nao consegui enxergar... faço uma consulta mysql que funciona normalmente no proprio ambiente(mysql) mas ao solicitar a exibição do campo via php gera nao exibe e me tras um alerta.
       
      ****codigo php
      function monta_avaliacao($cpf){
          $query = mysqli_query($_SESSION["conector"],"SELECT c.*, a. cliente AS clientes FROM clientes AS c INNER JOIN avaliacoes AS a ON c.id = a.cliente WHERE c.cpf='$cpf'");
           $dados = mysqli_fetch_assoc($query);
          print $dados['c.cpf'];
           }
       
      *****sainda no html
      Notice: Undefined index: c.cpf in C:\xampp\htdocs\acus\inclusoes\funcoes.php on line 29
      Notice: Undefined index: a.pe in C:\xampp\htdocs\acus\inclusoes\funcoes.php on line 30
       
      tenho um arquivo com as funções, e apenas mando os parametros.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.