none
Consulta INNER JOIN RRS feed

  • Pergunta

  • Bom dia,

    Preciso fazer u join entre as seguintes tables:

    select 
          nm_regiao,
          cd_estado,
          nm_estado
    from stg_loc_estado_loc;
    
    select  
          cd_cidade, 
          nm_cidade,
          cd_estado
    from stg_loc_cidade_loc;
     
    select 
          cd_agencia,
          nm_bairro,
          cd_cidade, 
          cd_estado
    from stg_loc_agencia_loc;  
    

    O meu join está correto?

    select  
          el.nm_regiao,
          el.cd_estado,
          el.nm_estado,
          cl.nm_cidade,
          al.nm_bairro
    from stg_loc_estado_loc el
    inner join stg_loc_cidade_loc cl
          on el.cd_estado = cl.cd_estado      
    inner join stg_loc_agencia_loc al
          on al.cd_cidade = cl.cd_cidade 
          and al.cd_estado = cl.cd_estado

    Muito obrigado.

    Fernando.

    quinta-feira, 12 de maio de 2016 14:28

Respostas

  • Boa tarde Fulvio,

    No primeiro re retornou 25 linhas e no segundo retornou 25 linhas. Penso que tem que retorna a quantidade de linhas da maior tabela no caso stg_loc_cidade_loc no caso com 10.093, ou não?

    Pedi para o pessoal de modelagem para me disponibilizar o modelo, o modelo inclui a coluna cd_estado em stg_loc_agencia_loc, na minha visão está errado, pois a tabela stg_loc_estado_loc não faz relacionamento com stg_loc_agencia_loc.

    Seu modelo está correto.

    Att,

    Fernando

    Não tem que retornar o número da maior tabelas e sim o que satisfaça a pesquisa, o duro é a gente imaginar cada tabela tem de informação, e além do mais apontamos o erro de relacionamento ... !!!

    Fulvio C

    sábado, 14 de maio de 2016 00:34

Todas as Respostas

  • Bom dia,

    tenta assim

    SELECT EL.NM_REGIAO, EL.CD_ESTADO, EL.NM_ESTADO, DL.CD_CIDADE, CL.NM_CIDADE, AL.NM_BAIRRO
    FROM STG_LOC_ESTADO_LOC AS EL 
    INNER JOIN
    STG_LOC_CIDADE_LOG AS CL ON CL.CD_ESTADO = EL.CD_ESTADO	
    INNER JOIN
    STG_LOC_AGENCIA_LOC AS AL ON AL.CD_CIDADE = CL.CD_CIDADE
    WHERE AL.CD_ESTADO = CL.CD_ESTADO


    Se foi útil marque como resposta por favor, obrigado Abraço Danilo Telles

    quinta-feira, 12 de maio de 2016 14:41
  • Bom dia,

    Fernando, aparentemente está correto. Não foi obtido o resultado esperado?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 12 de maio de 2016 14:43
  • Bom dia Gapimex,

    Está me retornando 25 linha, não teria que retornar 10.093 linhas?

    stg_loc_estado_loc = 27 linhas

    - stg_loc_cidade_loc = 10.093 linhas

    - stg_loc_agencia_loc = 25

    Fernando.

    sexta-feira, 13 de maio de 2016 12:42
  • Bom dia,

    Acho que você teria que verificar se as colunas utilizadas no relacionamento entre as tabelas (Join) estão corretas, e também se existe uma linha correspondente nas tabelas relacionadas.

    Um teste que você poderia fazer seria trocar os 2 Inner Join por Left Join para ver quantas linhas são retornadas e se as colunas nm_cidade e nm_bairro retornam algum valor ou null.

    Espero que ajude 


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 13 de maio de 2016 13:33
  • Talvez dê certo assim:

    SELECT a.nm_cidade, 
           b.nm_estado,
    	   c.cd_agencia,
    	   c.nm_bairro	   
    FROM stg_loc_cidade_loc a 
    INNER JOIN stg_loc_estado_loc b on b.cd_estado = a.cd_estado
    INNER JOIN stg_loc_agencia_loc c on c.cd_cidade=a.cd_cidade and c.cd_estado=b.cd_estado

    Mas eu usaria também assim com Left Join já visto que tu quer que tragam tudo que tem na tabela de cidade (stg_loc_cidade_loc)

    SELECT a.nm_cidade, 
           b.nm_estado,
    	   c.cd_agencia,
    	   c.nm_bairro	   
    FROM stg_loc_cidade_loc a 
    LEFT JOIN stg_loc_estado_loc b on b.cd_estado = a.cd_estado
    LEFT JOIN stg_loc_agencia_loc c on c.cd_cidade=a.cd_cidade and c.cd_estado=b.cd_estado

    O grande problema de sua tabelas é stg_loc_agencia_loc, porque, a mesma tem duas chaves de cidade e de estado?
    Dentro de cidade não tem a relação com estado ???

    Verifique a sua modelagem eu faria mais simples!!! e traria para interface o manuseio da cidade e estado grando nessa de agencia somente a de cidade, que automaticamente eu sabia que aquela cidade daquela identificação tem um estado !!!

      Na minha visão o layout de suas tabelas deveriam ser assim:

    Porque dessa forma eu chego a todas as informações e agora está normalizada!

    Apenas uma dica!


    Fulvio C



    sexta-feira, 13 de maio de 2016 14:42
  • Boa tarde Fulvio,

    No primeiro re retornou 25 linhas e no segundo retornou 25 linhas. Penso que tem que retorna a quantidade de linhas da maior tabela no caso stg_loc_cidade_loc no caso com 10.093, ou não?

    Pedi para o pessoal de modelagem para me disponibilizar o modelo, o modelo inclui a coluna cd_estado em stg_loc_agencia_loc, na minha visão está errado, pois a tabela stg_loc_estado_loc não faz relacionamento com stg_loc_agencia_loc.

    Seu modelo está correto.

    Att,

    Fernando

    sexta-feira, 13 de maio de 2016 20:38
  • Boa tarde Fulvio,

    No primeiro re retornou 25 linhas e no segundo retornou 25 linhas. Penso que tem que retorna a quantidade de linhas da maior tabela no caso stg_loc_cidade_loc no caso com 10.093, ou não?

    Pedi para o pessoal de modelagem para me disponibilizar o modelo, o modelo inclui a coluna cd_estado em stg_loc_agencia_loc, na minha visão está errado, pois a tabela stg_loc_estado_loc não faz relacionamento com stg_loc_agencia_loc.

    Seu modelo está correto.

    Att,

    Fernando

    Não tem que retornar o número da maior tabelas e sim o que satisfaça a pesquisa, o duro é a gente imaginar cada tabela tem de informação, e além do mais apontamos o erro de relacionamento ... !!!

    Fulvio C

    sábado, 14 de maio de 2016 00:34
  • Deleted
    sexta-feira, 27 de maio de 2016 21:38