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
  

Mensagemem Qua, 27 Fev 2008 5:56 pm

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í
Código: Selecionar todos
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
Código: Selecionar todos
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:
Código: Selecionar todos
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
tatianeweb
Localização: ARACAJU-SE

Tati

Mensagemem Qua, 27 Fev 2008 8:28 pm

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:

Código: Selecionar todos
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
;
rogenaro
Localização: Londrina - PR

Rafael O. Genaro

Mensagemem Qui, 28 Fev 2008 10:25 am

Tópico movido para forum SQL
dr_gori
Localização: Portland, OR USA

Thomas F. G

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

Mensagemem Qui, 28 Fev 2008 2:51 pm

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:
Código: Selecionar todos
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!
Código: Selecionar todos
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???
tatianeweb
Localização: ARACAJU-SE

Tati

Mensagemem Qui, 28 Fev 2008 6:25 pm

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:

Código: Selecionar todos
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..
rogenaro
Localização: Londrina - PR

Rafael O. Genaro

Mensagemem Sex, 29 Fev 2008 7:20 am

Ta certo, foi eu que me atrapalhei na lógica do problema
Valeu mesmo pela ajuda!
Um abraço
tatianeweb
Localização: ARACAJU-SE

Tati


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante