none
Erro com Select RRS feed

  • Pergunta

  • Fiz esse Select em C#, mas percebi que retornando algo errado, e fiz o teste pelo Mysql Command Line...

    SELECT produtos.cod_produto, fornecedores.cod_fornecedor, produtos.nome FROM produtos inner join fornecedores on fornecedores.cod_fornecedor = produtos.cod_fornecedor OR produtos.cod_fornecedor is null;

    Coloquei produtos.cod_fornecedor is null para listar tambem os produtos que não há cod_fornecedor cadastrado.

    Mas depois que coloquei o produtos.cod_fornecedor is null, no SELECT está listando varias vezes o produto que nao tem cod_fornecedor cadastrado. Se eu tirar o produtos.cod_fornecedor is null, lista tudo certinho menos os produtos que estao com o campo cod_fornecedor vazio.

    Vendo na imagem abaixo, o produto de codigo 31 foi listado varias vezes, e ele nao tem cod_fornecedor cadastrado.


    quarta-feira, 28 de agosto de 2013 17:02

Respostas

  • Cara, eu usaria o "LEFT  OUTER JOIN"

    SELECT produtos.cod_produto, fornecedores.cod_fornecedor, produtos.nome

    FROM produtos LEFT OUTER JOIN fornecedores on fornecedores.cod_fornecedor = produtos.cod_fornecedor 

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    • Sugerido como Resposta Márcio S Silva quarta-feira, 28 de agosto de 2013 17:27
    • Marcado como Resposta Rodrigo1810 quarta-feira, 28 de agosto de 2013 17:30
    quarta-feira, 28 de agosto de 2013 17:27
  • Cara, eu usaria o "LEFT  OUTER JOIN"

    SELECT produtos.cod_produto, fornecedores.cod_fornecedor, produtos.nome

    FROM produtos LEFT OUTER JOIN fornecedores on fornecedores.cod_fornecedor = produtos.cod_fornecedor 

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    Ah, sem o produtos.cod_fornecedor is null;

    Pois se não encontrar, vai trazer a coluna em branco.

    Se ajudar, marque como resposta, pls.


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    • Sugerido como Resposta Márcio S Silva quarta-feira, 28 de agosto de 2013 17:28
    • Marcado como Resposta Rodrigo1810 quarta-feira, 28 de agosto de 2013 17:29
    quarta-feira, 28 de agosto de 2013 17:28

Todas as Respostas

  • Cara, eu usaria o "LEFT  OUTER JOIN"

    SELECT produtos.cod_produto, fornecedores.cod_fornecedor, produtos.nome

    FROM produtos LEFT OUTER JOIN fornecedores on fornecedores.cod_fornecedor = produtos.cod_fornecedor 

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    • Sugerido como Resposta Márcio S Silva quarta-feira, 28 de agosto de 2013 17:27
    • Marcado como Resposta Rodrigo1810 quarta-feira, 28 de agosto de 2013 17:30
    quarta-feira, 28 de agosto de 2013 17:27
  • Cara, eu usaria o "LEFT  OUTER JOIN"

    SELECT produtos.cod_produto, fornecedores.cod_fornecedor, produtos.nome

    FROM produtos LEFT OUTER JOIN fornecedores on fornecedores.cod_fornecedor = produtos.cod_fornecedor 

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    Ah, sem o produtos.cod_fornecedor is null;

    Pois se não encontrar, vai trazer a coluna em branco.

    Se ajudar, marque como resposta, pls.


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    • Sugerido como Resposta Márcio S Silva quarta-feira, 28 de agosto de 2013 17:28
    • Marcado como Resposta Rodrigo1810 quarta-feira, 28 de agosto de 2013 17:29
    quarta-feira, 28 de agosto de 2013 17:28
  • Deu certo, mas o que esse LEFT OUTER JOIN faz?

    Vlw

    quarta-feira, 28 de agosto de 2013 17:30
  • Então. 

    Se tiver algo ele faz o join normal, se não tiver ele traz em branco

    Só com o inner join, ele sempre vai tentar popular, mesmo que seja null. Isso acaba gerando valores inconsistentes na query.

    É útil nesses casos que vc quer trazer mesmo null. 

    Abraços.


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    quarta-feira, 28 de agosto de 2013 17:43