junaooaks 3 Denunciar post Postado Novembro 13, 2012 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
Motta 645 Denunciar post Postado Novembro 13, 2012 Use outer join. Compartilhar este post Link para o post Compartilhar em outros sites
Danilo Soncini 15 Denunciar post Postado Novembro 17, 2012 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
junaooaks 3 Denunciar post Postado Novembro 17, 2012 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