none
RETORNO DE SELECT VAZIO RRS feed

  • Pergunta

  • Olá Amigos! sou novo aqui no Fórum(Acabei de me Cadastrar rs) e Gostaria da Ajuda de vocês!

    Estou Tentando Fazer o Seguinte Select no Meu Banco SQL SERVER:

     

    SELECT     Empresa.*, Endereco.*, Pessoa.*, pessoa_categoria.*, Pessoa_Fisica.*,Pessoa_Juridica.*,Municipio.*
    FROM
    Pessoa 
    INNER JOIN Empresa On Empresa.Empresa_i_Id = Pessoa.Pessoa_i_id_Empresa
    Inner Join Pessoa_Categoria on Pessoa_Categoria_i_id = Pessoa.Pessoa_i_id_Categoria
    Inner Join Pessoa_Fisica on Pessoa_Fisica.Pessoa_Fisica_i_id_pessoa = Pessoa.Pessoa_i_Id
    Inner Join Pessoa_Juridica on Pessoa_Juridica.Pessoa_Juridica_i_id_pessoa = Pessoa.Pessoa_i_Id 
    Inner Join Endereco on Endereco.Endereco_i_id_Pessoa = Pessoa.Pessoa_i_id                      
    inner jOIN Municipio on Municipio.Municipio_i_id = Endereco.Endereco_i_id_municipio
     
    Porém a Consulta Retorna Vazia! Não Sei o que estou fazendo de errado!
     
    Porém se eu faço umas das Consultas Abaixo Funciona:
     
    SELECT     Empresa.*, Endereco.*, Pessoa.*, pessoa_categoria.*,Pessoa_Fisica.*,Municipio.*
    FROM
    Pessoa 
    INNER JOIN Empresa On Empresa.Empresa_i_Id = Pessoa.Pessoa_i_id_Empresa
    Inner Join Pessoa_Categoria on Pessoa_Categoria_i_id = Pessoa.Pessoa_i_id_Categoria
    inner Join Pessoa_Fisica on Pessoa_Fisica.Pessoa_Fisica_i_id_pessoa = Pessoa.Pessoa_i_Id 
    Inner Join Endereco on Endereco.Endereco_i_id_Pessoa = Pessoa.Pessoa_i_id                      
    inner jOIN Municipio on Municipio.Municipio_i_id = Endereco.Endereco_i_id_municipio
     
    Ou...
     
     
    SELECT     Empresa.*, Endereco.*, Pessoa.*, pessoa_categoria.*,Pessoa_Juridica.*,Municipio.*
    FROM
    Pessoa 
    INNER JOIN Empresa On Empresa.Empresa_i_Id = Pessoa.Pessoa_i_id_Empresa
    Inner Join Pessoa_Categoria on Pessoa_Categoria_i_id = Pessoa.Pessoa_i_id_Categoria
    inner Join Pessoa_Juridica on Pessoa_Juridica.Pessoa_Juridica_i_id_pessoa = Pessoa.Pessoa_i_Id 
    Inner Join Endereco on Endereco.Endereco_i_id_Pessoa = Pessoa.Pessoa_i_id                      
    inner jOIN Municipio on Municipio.Municipio_i_id = Endereco.Endereco_i_id_municipio
     
    Alguém Tem Uma Luz?
    sábado, 2 de maio de 2015 17:38

Respostas

  • Boa tarde,

    O que da para ser notado na select, vocÊ não possui pessoas que seja tanto Fisica como Juridica por isso não tem retorno na sua primeira select.

    vc deve deixar separado as select, vc precisa retorna as informações tanto pessoa fisica quanto juridica na mesma consulta?

    Acredito que você possua uma Tabela pessoa e por ela filtrar endereço e municipio, se precisar dos dados de pessoa fisica ou juridica pode acrescentar essas tabela mas com Left Join.


    Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco

    • Marcado como Resposta Eduardo.Romero terça-feira, 5 de maio de 2015 11:16
    sábado, 2 de maio de 2015 18:59
  • Bom dia Lauro,

    O retorno da sua consulta é vazio porque você está procurando uma pessoa que seja Pessoa Física e Pessoa Jurídica ao mesmo tempo, porque está utilizando o INNER JOIN das duas tabelas na mesma consulta.

    Eu faria o seguinte: criaria duas consultas (igual você colocou embaixo da sua consulta que não gera resultado) e para saber qual disparar, criaria uma consulta simples para identificar se a pessoa consultada é Física ou Jurídica.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    • Marcado como Resposta Eduardo.Romero terça-feira, 5 de maio de 2015 11:16
    segunda-feira, 4 de maio de 2015 14:09
  • O inner join só mostra o resultado caso ele exista dos dois lados. A consulta que voce procura deveria usar "left join":

    SELECT     Empresa.*, Endereco.*, Pessoa.*, pessoa_categoria.*, Pessoa_Fisica.*,Pessoa_Juridica.*,Municipio.*
    FROM
    Pessoa 
    LEFT JOIN Empresa On Empresa.Empresa_i_Id = Pessoa.Pessoa_i_id_Empresa
    LEFT JOIN  Pessoa_Categoria on Pessoa_Categoria_i_id = Pessoa.Pessoa_i_id_Categoria
    LEFT JOIN  Pessoa_Fisica on Pessoa_Fisica.Pessoa_Fisica_i_id_pessoa = Pessoa.Pessoa_i_Id
    LEFT JOIN  Pessoa_Juridica on Pessoa_Juridica.Pessoa_Juridica_i_id_pessoa = Pessoa.Pessoa_i_Id 
    LEFT JOIN  Join Endereco on Endereco.Endereco_i_id_Pessoa = Pessoa.Pessoa_i_id                      
    LEFT JOIN  Municipio on Municipio.Municipio_i_id = Endereco.Endereco_i_id_municipio

    deste jeito, se a peeosa nao possui dados correspondentes nas outras tabelas, um valor nulo sera gerado.. com o inner join a linha simplesmente nao é gerada.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Eduardo.Romero terça-feira, 5 de maio de 2015 11:16
    segunda-feira, 4 de maio de 2015 14:19

Todas as Respostas

  • Boa tarde,

    O que da para ser notado na select, vocÊ não possui pessoas que seja tanto Fisica como Juridica por isso não tem retorno na sua primeira select.

    vc deve deixar separado as select, vc precisa retorna as informações tanto pessoa fisica quanto juridica na mesma consulta?

    Acredito que você possua uma Tabela pessoa e por ela filtrar endereço e municipio, se precisar dos dados de pessoa fisica ou juridica pode acrescentar essas tabela mas com Left Join.


    Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco

    • Marcado como Resposta Eduardo.Romero terça-feira, 5 de maio de 2015 11:16
    sábado, 2 de maio de 2015 18:59
  • Bom dia Lauro,

    O retorno da sua consulta é vazio porque você está procurando uma pessoa que seja Pessoa Física e Pessoa Jurídica ao mesmo tempo, porque está utilizando o INNER JOIN das duas tabelas na mesma consulta.

    Eu faria o seguinte: criaria duas consultas (igual você colocou embaixo da sua consulta que não gera resultado) e para saber qual disparar, criaria uma consulta simples para identificar se a pessoa consultada é Física ou Jurídica.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    • Marcado como Resposta Eduardo.Romero terça-feira, 5 de maio de 2015 11:16
    segunda-feira, 4 de maio de 2015 14:09
  • O inner join só mostra o resultado caso ele exista dos dois lados. A consulta que voce procura deveria usar "left join":

    SELECT     Empresa.*, Endereco.*, Pessoa.*, pessoa_categoria.*, Pessoa_Fisica.*,Pessoa_Juridica.*,Municipio.*
    FROM
    Pessoa 
    LEFT JOIN Empresa On Empresa.Empresa_i_Id = Pessoa.Pessoa_i_id_Empresa
    LEFT JOIN  Pessoa_Categoria on Pessoa_Categoria_i_id = Pessoa.Pessoa_i_id_Categoria
    LEFT JOIN  Pessoa_Fisica on Pessoa_Fisica.Pessoa_Fisica_i_id_pessoa = Pessoa.Pessoa_i_Id
    LEFT JOIN  Pessoa_Juridica on Pessoa_Juridica.Pessoa_Juridica_i_id_pessoa = Pessoa.Pessoa_i_Id 
    LEFT JOIN  Join Endereco on Endereco.Endereco_i_id_Pessoa = Pessoa.Pessoa_i_id                      
    LEFT JOIN  Municipio on Municipio.Municipio_i_id = Endereco.Endereco_i_id_municipio

    deste jeito, se a peeosa nao possui dados correspondentes nas outras tabelas, um valor nulo sera gerado.. com o inner join a linha simplesmente nao é gerada.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Eduardo.Romero terça-feira, 5 de maio de 2015 11:16
    segunda-feira, 4 de maio de 2015 14:19