Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
E tenho uma tabela chamada formulario_valor que recebe os valores do campo ficando assim
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?
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:
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
Acho que o que o @Motta quis dizer é para fazer somente isto:
SELECT
a.`cod_campo`,
a.`descricao`,
a.sobrenome, ...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...
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.
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 é?
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.
~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..
posta um exemplo dos dados e como vc gostaria que fosse o resultado da consulta
Bastaria incluir o campo no SELECT , creio.