Ir para conteúdo

POWERED BY:

Arquivado

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

CrazyLOL

Left Outer Join trazer valores nulos

Recommended Posts

Galera to com uma pequena bronca e nao estou conseguindo resolver, é o seguinte.

Tenho uma tabela chamada "formulario_campo" nela eu tenho os seguintes valores:

- nome

- cpf

- nascimento

 

E tenho uma tabela chamada formulario_valor que recebe os valores do campo ficando assim

- campo: nome , valor : Jose

- campo: cpf , valor : 123

- campo: nascimento , valor : dezembro

 

Ate aqui esta OK, quando dou um select usando Left outer Join ele me traz os resultados certinho e bonitinho.. a questão esta no seguinte item...

Na tabela formulario_campo, adicionei um novo campo chamado "sobrenome", respectivamente na tabela formulario_valor ainda nao tenho este novo campo adicionado pois por ser um novo campo ninguem cadastrou o sobrenome sendo assim este valor nao existe na tabela formulario_valor, certo?

 

Neste momento eu estou dando um select na tabela formulario_campo e dando join na tabela formulario_valor para trazer todos os campos que foram preenchidos, a duvida esta no seguinte ponto, eu preciso que o campo "sobrenome" venha tambem, mesmo nao existindo la porem preciso que venha com o valor de NULL, tecnicamente o LEFT OUTER JOIN nao resolveria este problema? No momento ele so me retorna os 3 campos inicias, o novo campo que adicionei nao vem na lista...

 

Abaixo o meu select

SELECT 
  a.`cod_campo`,
  a.`descricao`,
  b.valor,
  b.`cod_formulario`,
  b.`cod_oportunidade` 
FROM
  formulario_campo a 
  LEFT OUTER JOIN formulario_valor b 
    ON (
      a.`cod_campo` = b.`cod_campo` 
      AND a.`cod_formulario` = b.`cod_formulario`
    ) 
WHERE b.cod_oportunidade = 145 
ORDER BY a.`ordem` 

O que posso fazer para resolver isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, obrigado pela Resposta Motta, mas nao compreendi? Incluir o campo no select? Na realidade os valores que possuo na tabela formulario_campo não é um campo mas sim um registro..

 

Na tabela formulario_campo eu possuo a estrutura (cod_campo, cod_formulario) os registros nela são:

- Cod_campo: nome, cod_formulario : 1

- Cod_campo: cpf, cod_formulario : 1

- Cod_campo: nascimento, cod_formulario : 1

 

Na tabela formulario_valor eu faço o recebimento das respostas do usuario no caso ele tem os 4 campos (cod_campo FK FormularioCampo, cod_formulario FK FormularioCampo, cod_oportunidade FK Cliente, valor)

 

E nesta tabela fica salvo os registros com as respostas..

Porém como citei quando adicionei um novo campo na tabela formulario_campo mesmo nao existindo esse valor na tabela formulario_valor precisaria que ele me retornasse mesmo com o valor de null, tecnicamente deveria me retornar este tipo de resultado:

 

Cod_campo: Nome, valor: Jose

Cod_campo: cpf , valor: 123

Cod_campo: nascimento, valor: dezembro

Cod_campo: sobrenome, valor: null

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela Reposta Rockrgo, porém como citei os valores dentro da tabela formulario_campo é registros, para ilustrar melhor ainda, aqui um print basico usando o select acima:

 

https://www.dropbox.com/s/1ffi1ptidomayhe/Captura%20de%20tela%202016-01-21%2009.20.40.png?dl=0

 

Lembrando que estou trabalhando com campos dinamicos de um formulario, e colocando a maneira que citaram nao funcionaria...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se foi criada nova coluna na tabela os passos seriam :

 

Incluir a nova coluna no sqls do sistema em que ela é necessária.

 

Incluir o campo de exibição na aplicação "front-end"

 

Sua dúvida não me parece de Banco de dados e sim de como implementar este novo campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, agradeço a resposta, mas acredito que seja no banco de dados porque estou gerando um relatorio Dinamico...

Como o exemplo eu citei acima eu tenho registros que formara o meu formulario (formulario_campo), nele temos Nome, sexo, Nascimento e outros campos que poderão surgir.. quando a pessoa responde isso vinculo as respostas do campo e do valor na tabela ( formulario_valor ).

 

Até aqui ok...

 

Agora vou gerar um relatorio do cod_formulario = 1 (esse formulario é de usuario, pode ter N formularios criados com N campos )

 

Nesse formulario 1 é do exemplo que estou citando, como disse pode ter momentos que eu adicione um novo campo que ainda nao existe respostas porém seria necessário que ele viesse com o valor ou qualquer coisa mas tem que vim este campo.

 

No meu pensamento o LEFT OUTER deveria trazer tudo da tabela formulario_campo , inclusive campos que não existem na tabela Formulario_valor, não é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outer join é um tipo de join que trás resultados mesmos quando não existam correspondentes.

 

Um exemplo : FUNCIONARIOS e DEPENDENTES .

 

Um join deste tipo deve trazer Funcionários que não tenham dependentes.

 

Não tem relação com novas colunas em uma tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

~Estava pensando aqui, no caso ele vai retornar valores mesmo que não estão na tabela, mas neste item eu estou trabalhando registros e não novos atributos de uma tabela certo?

 

Reformulando a pergunta agora, como retorno valores de um registro que não possuem em outra tabela, que no caso seria este exemplo que citei..

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.