Problema com um JOIN

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Avatar do usuário
tatianeweb
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 26 Fev 2008 5:20 pm
Localização: ARACAJU-SE
Tati

Pessoal, to precisando fazer um select que me retorne as seguintes informações juntas:
UF_NASC e UF_CARTORIO

esses campos estão na mesma tabela como sendo:
cod_munic_nasc e cod_munic_cartorio -- tabela A

o problema é que os dois campo são chaves estrangeiras de um mesmo campo que é
cod_municipio -- tabela B

Eu não to sabendo fazer esse join, porque eu vou usar o mesmo campo para duas coisas diferentes, veja abaixo:

Primeiro eu fiz uma consulta com os códigos que são diferentes então ele me retornou isso aí

Selecionar tudo

SQL> select A.cod_munic_nasc, A.cod_munic_cartorio
  2  from dependentes A, municipio B
  3  where A.cod_munic_nasc = B.cod_municipio
  4  and A.cod_munic_cartorio = B.cod_municipio
  5  and rownum <=5;
       2800308            2800308
       2800308            2800308
       2800308            2800308
       2800308            2800308
       2800308            2800308
aí eu pensei, "vai ver a UF que o cara nasceu é a mesma do registro do cartório", nesse caso o select acima tava certo!
aí fiz o teste pra ver se tinha UFs diferente nos registro

Selecionar tudo

SQL> select cod_munic_nasc, cod_munic_cartorio
  2  from dependentes
  3  where cod_munic_nasc <> cod_munic_cartorio
  4  and rownum <=5;
       2408102            2800308
       2802908            2806008
       2802809            2800308
       2800407            2804805
       2804003            2800308
Então eu pude constatar que tem caso em que a UF de nascimento não é igual a UF do cartório, então coloquei mais uma condição no 1° select, que ficou assim:

Selecionar tudo

SQL> select A.cod_munic_nasc, A.cod_munic_cartorio
  2  from dependentes A, municipio B
  3  where A.cod_munic_nasc = B.cod_municipio
  4  and A.cod_munic_cartorio = B.cod_municipio
  5  and A.cod_munic_nasc <> A.cod_munic_cartorio
  6  and rownum <=5;

não há linhas selecionadas
preciso dizer mais alguma coisa??????

Não sei se conseguiram entender, mas to esperando resposta!

valeus
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Se entendi corretamente, seu problema esta no fato de que você está utilizando a tabela municipio apenas uma vez.
Como existem dois campos distintos em sua tabela dependentes que referenciam o campo cod_municipio, você precisa utilizá-la duas vezes, para realizar o join sobre cada um dos campos:

Selecionar tudo

select d.cod_munic_nasc, d.cod_munic_cartorio 
from   dependentes d
     , municipio m_nascimento -- Município de nascimento
     , municipio m_cartorio   -- Município de cartório
where  d.cod_munic_nasc     = m_nascimento.cod_municipio 
and    d.cod_munic_cartorio = m_cartorio.cod_municipio 
and    rownum <=5
;
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Tópico movido para forum SQL
Avatar do usuário
tatianeweb
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 26 Fev 2008 5:20 pm
Localização: ARACAJU-SE
Tati

Funcionou o que você me mostrou, mas eu não entendi direito como funcionou esse select, tanto não entendi que quando eu fui adaptar para um outro campo que precisei deu erro!

com o que você me disse eu testei e deu isso:

Selecionar tudo

SQL> select d.cod_munic_nasc, d.cod_munic_cartorio 
  2  from   dependentes d, municipio m_nascimento, municipio m_cartorio
  3  where  d.cod_munic_nasc     = m_nascimento.cod_municipio 
  4  and    d.cod_munic_cartorio = m_cartorio.cod_municipio 
  5  and    d.cod_munic_nasc != d.cod_munic_cartorio
  6  and    rownum <=5;

COD_MUNIC_NASC COD_MUNIC_CARTORIO
-------------- ------------------
       2408102            2800308
       2802908            2806008
       2802809            2800308
       2800407            2804805
       2804003            2800308
beleza, aí depois eu tirei os campos de códigos da 1° linha e substituir pelo campo da sigla da uf que fica na tabela municipio, só que o resultado ta muito estranho. Veja como ficou!

Selecionar tudo

SQL> select m_nascimento.sgl_uf Nasc, m_cartorio.sgl_uf Cart
  2  from   dependentes d, municipio m_nascimento, municipio m_cartorio
  3  where  d.cod_munic_nasc     = m_nascimento.cod_municipio 
  4  and    d.cod_munic_cartorio = m_cartorio.cod_municipio 
  5  and    d.cod_munic_nasc != d.cod_munic_cartorio
  6  and    rownum <=5;

NA CA
-- --
RN SE
SE SE
SE SE
SE SE
SE SE

Não se se o erro é de lógica ou de sintaxe, só sei que ta errado!
E aí?? O que eu faço agora??? Qual foi o erro???
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Hmm.. não estou vendo o problema..

A consulta está retornando o estado de nascimento e de cartório de cada dependente que não possui o mesmo município de nascimento e cartório.

Por via das dúvida, para confirmar, tente listar todos os campos envolvidos para dar uma conferida:

Selecionar tudo

select d.cod_munic_nasc            dep_municipio_nascimento
     , m_nascimento.cod_municipio  mun_municipio_nascimento
     , d.cod_munic_cartorio        dep_municipio_cartorio
     , m_cartorio.cod_municipio    mun_municipio_cartorio
     , m_nascimento.sgl_uf         sgl_uf_nascimento
     , m_cartorio.sgl_uf           sgl_uf_cartorio
from   dependentes d
     , municipio m_nascimento
     , municipio m_cartorio 
where  d.cod_munic_nasc     = m_nascimento.cod_municipio 
and    d.cod_munic_cartorio = m_cartorio.cod_municipio 
and    d.cod_munic_nasc    != d.cod_munic_cartorio 
and    rownum <=5;

Se eu entendi errado, explique um pouco melhor o que você esperava receber como resultado..
Avatar do usuário
tatianeweb
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 26 Fev 2008 5:20 pm
Localização: ARACAJU-SE
Tati

Ta certo, foi eu que me atrapalhei na lógica do problema
Valeu mesmo pela ajuda!
Um abraço
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 12 visitantes