Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

junaooaks

[Resolvido] consulta sql is null

Recommended Posts

pessoal

tenho um cosulta onde preciso mara os campos.id de cada tabela, simples

o problema e que tem tabela que nao tem registro campo null ai a consulta na me retorna nada

 

sql

SELECT  produto.idproduto, produto.codFabricante, produto.codigoEAN, produto.descricao AS nome_pro, produto.classificacao, produto.fracionavel, produto.localizacao, produto.pesoBruto, produto.pesoLiquido, produto.estoqueAtual, produto.estoqueMaximo, produto.estoqueMinimo, produto.status,
                       custo.idcusto, custo.valorUnitario, custo.st, custo.ipi, custo.frete, custo.fretePorcentagen, custo.precoCusto, custo.piscofins, custo.irCsll, custo.Lucro, custo.precoVenda, custo.percentualComissao,
                       grupo.idgrupo, grupo.descricao AS nome_gru,
                       subgrupo.idsubgrupo, subgrupo.descricaoSubGrupo,
                       marca.idmarca, marca.descricao AS nome_mar,
                       fornecedor.idfornecedor, fornecedor.descricao AS nome_for,
                       unidade.idunidade, unidade.descricao AS nome_uni,
                       empresa.idempresa, empresa.nome AS nome_emp

               FROM produto, custo, grupo, subgrupo, marca, fornecedor, unidade, empresa WHERE idproduto = ? 
               AND produto.custo_idcusto = custo.idcusto
               AND produto.grupo_idgrupo = grupo.idgrupo
               AND subgrupo_idsubgrupo = idsubgrupo
               AND marca_idmarca = idmarca
               AND fornecedor_idfornecedor = idfornecedor
               AND unidade_idunidade = idunidade
               AND empresa_idempresa = idempresa

 

como faço para ignorar se campo

 

AND produto.grupo_idgrupo = grupo.idgrupo

 

nao tiver registro for null, ou seja não amarra as colunas

 

tipo:

IF (produto.grupo_idgrupo = IS NOT NULL)FAZER A COMPARAÇÃO

 

OBRIGADo

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia usar condições OR junto dos ANDs

 

SELECT  produto.idproduto, produto.codFabricante, produto.codigoEAN, produto.descricao AS nome_pro, produto.classificacao, produto.fracionavel, produto.localizacao, produto.pesoBruto, produto.pesoLiquido, produto.estoqueAtual, produto.estoqueMaximo, produto.estoqueMinimo, produto.status,
                       custo.idcusto, custo.valorUnitario, custo.st, custo.ipi, custo.frete, custo.fretePorcentagen, custo.precoCusto, custo.piscofins, custo.irCsll, custo.Lucro, custo.precoVenda, custo.percentualComissao,
                       grupo.idgrupo, grupo.descricao AS nome_gru,
                       subgrupo.idsubgrupo, subgrupo.descricaoSubGrupo,
                       marca.idmarca, marca.descricao AS nome_mar,
                       fornecedor.idfornecedor, fornecedor.descricao AS nome_for,
                       unidade.idunidade, unidade.descricao AS nome_uni,
                       empresa.idempresa, empresa.nome AS nome_emp

               FROM produto, custo, grupo, subgrupo, marca, fornecedor, unidade, empresa WHERE idproduto = ? 
               AND produto.custo_idcusto = custo.idcusto
               AND (produto.grupo_idgrupo = grupo.idgrupo OR produto.grupo_idgrupo IS NULL)
               AND subgrupo_idsubgrupo = idsubgrupo
               AND marca_idmarca = idmarca
               AND fornecedor_idfornecedor = idfornecedor
               AND unidade_idunidade = idunidade
               AND empresa_idempresa = idempresa

 

Então ele busca os produto.grupo_idgrupo que forem iguais ao grupo.idgrupo ou onde produto.grupo_idgrupo é NULL.

 

No entanto se eu fosse você seguiria o conselho do Motta e trocaria esses "select form um monte de tabela" por um select com seus inner e left joins, pois do jeito que fiz as condições WHERE acredito que acabareia com o indice da tabela o que vai gerar problemas a longro praso.

 

Obs. Para testar os indices use antes do SELECT utilize o comando EXPLAIN.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Danilo Soncini

obrigador por responder, já resolvi usei LEFT JOIN, no meu caso foi a melhor saida, no começo eu estava tentando encontrar outra saida.

 

mas ja esta resolvido obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.