Fórum Banco de dados - Cadastrar cidade para Pai, mãe, conjuge na mesma tabela #485159
11/07/2014
0
Boa noite,
Gostaria da ajuda dos colegas aqui no fórum para uma seguinte situação, eu tenho um banco de dados para cadastro de Pessoas, eu modelei ele para receber a tabela de cidades, onde na tabela de pessoas apareceu a seguinte necessidade cadastrar Cidades para pai, mãe, cônjuge e para a pessoa cadastrada também, eu gostaria de cadastrar o código desta cidade relacionando ela com a tabela usando a chave estrangeira, e a imagem de como é o cadastro.
[img:descricao=ImagemDevMedia]http://arquivo.devmedia.com.br/forum/imagem/251195-20140711-014650.png[/img]
Até aí tudo bem, o problema é quando vou utilizar um Join para mostrar esses dados, eles não me retornam corretamente, vou postar o código SQL, do select
SELECT PESSOA.PES_ID, PESSOA.COMUNIDADE_COM_ID, COMUNIDADE.COM_NME_OFFICIAL, PESSOA.PES_APELIDO, PESSOA.PES_CPF, PESSOA.PES_DTA_CADASTRO, PESSOA.PES_DTA_NASC, PESSOA.PES_ESTADOCIVIL, PESSOA.PES_ESCOLARIDADE, PESSOA.PES_ENDERECO, PESSOA.PES_INICIAL, PESSOA.PES_RG, PESSOA.PES_SEXO, PESSOA.PES_IDADE, PESSOA.PES_MOTIVO_AFASTAMENTO, PESSOA.PES_NATURALIDADE_OPCAO, PESSOA.PES_NATUR_OPCAO_PAI, PESSOA.PES_NATUR_OPCAO_MAE, PESSOA.PES_NATUR_OPCAO_CONJ, PESSOA.PES_NOME, PESSOA.PES_PROFISSAO, PESSOA.PES_PROFISSAOMAE, PESSOA.PES_PROFISSAOPAI, PESSOA.PES_PROFISSAOCONJUGUE, PESSOA.PES_RELIGIAO, PESSOA.PES_TIPORENDA, PESSOA.PES_FAIXA_ETARIA, PESSOA.PES_CRIA_PAIS, PESSOA.PES_CRIA_NEGA_MAE_ADO, PESSOA.PES_CRIA_NEGA_PAI_ADO, PESSOA.PES_TPO_PESSOA, PESSOA.PES_OBSGERAL, PESSOA.PES_PAI, PESSOA.PES_MAE, CIDADE.MUNICIPIO FROM COMUNIDADE INNER JOIN PESSOA ON (COMUNIDADE.COM_ID=PESSOA.COMUNIDADE_COM_ID) INNER JOIN CIDADE ON (PESSOA.PES_NATURALIDADE_OPCAO=CIDADE.CID_ID) AND (PESSOA.PES_NATUR_OPCAO_PAI=CIDADE.CID_ID) AND (PESSOA.PES_NATUR_OPCAO_MAE=CIDADE.CID_ID) AND (PESSOA.PES_NATUR_OPCAO_CONJ=CIDADE.CID_ID)
Estou Utilizando Delphi 2010 e Firebird 2.5
Cleber Santos
Curtir tópico
+ 0Posts
11/07/2014
Guilherme
Use INNER JOIN sempre que tiver certeza que na tabela de destino tem registro, pois se não tiver no campo o registro não irá retornar nada, principalmente na situação que a naturalidade de pai, mãe e conjugue não estiverem sido preenchido por isso AND na clausula de relacionamento.
FROM
COMUNIDADE
INNER JOIN PESSOA ON (COMUNIDADE.COM_ID=PESSOA.COMUNIDADE_COM_ID)
INNER JOIN CIDADE ON (PESSOA.PES_NATURALIDADE_OPCAO=CIDADE.CID_ID)
AND (PESSOA.PES_NATUR_OPCAO_PAI=CIDADE.CID_ID)
AND (PESSOA.PES_NATUR_OPCAO_MAE=CIDADE.CID_ID)
AND (PESSOA.PES_NATUR_OPCAO_CONJ=CIDADE.CID_ID)
Alterando seu SQL:
SELECT
...
...,
CIDADE_NATURALIDADE.CID_ID,
CIDADE_MAE.CID_ID,
CIDADE_PAI.CID_ID,
CIDADE_CONJ.CID_ID,
...
...
FROM
COMUNIDADE
INNER JOIN
PESSOA
ON (COMUNIDADE.COM_ID=PESSOA.COMUNIDADE_COM_ID)
LEFT JOIN
CIDADE AS CIDADE_NATURALIDADE
ON (PESSOA.PES_NATURALIDADE_OPCAO=CIDADE_NATURALIDADE.CID_ID)
LEFT JOIN
CIDADE AS CIDADE_MAE
ON (PESSOA.PES_NATUR_OPCAO_MAE=CIDADE_MAE.CID_ID)
LEFT JOIN
CIDADE AS CIDADE_PAI
ON (PESSOA.PES_NATUR_OPCAO_PAI=CIDADE_PAI.CID_ID)
LEFT JOIN
CIDADE AS CIDADE_CONJ
ON (PESSOA.PES_NATUR_OPCAO_CONJ=CIDADE_CONJ.CID_ID)
Abraços
Gostei + 0
12/07/2014
Cleber Santos
Pelo que você postou eu preciso fazer a alteração na tabela de cidade alterando estes campos,
que tem na tabela de pessoa?
Lembrando esta relação quem recebe os dados da tabela é a de cliente, que recebe o código da cidade, o problema é a fazer o join e mostrar o código e o nome da cidade para aqueles campos...
Gostei + 0
12/07/2014
Cleber Santos
fiz uns ajustes e consegui o resultado alterando no
Select
CIDADE_NATURALIDADE.MUNICIPIO, CIDADE_PAI.MUNICIPIO, CIDADE_MAE.MUNICIPIO, CIDADE_CONJ.MUNICIPIO
e Nos Joins
FROM COMUNIDADE INNER JOIN PESSOA ON (COMUNIDADE.COM_ID=PESSOA.COMUNIDADE_COM_ID) LEFT OUTER JOIN CIDADE CIDADE_NATURALIDADE ON (PESSOA.PES_NATURALIDADE_OPCAO=CIDADE_NATURALIDADE.CID_ID) LEFT OUTER JOIN CIDADE CIDADE_MAE ON (PESSOA.PES_NATUR_OPCAO_MAE=CIDADE_MAE.CID_ID) LEFT OUTER JOIN CIDADE CIDADE_PAI ON (PESSOA.PES_NATUR_OPCAO_PAI=CIDADE_PAI.CID_ID) LEFT OUTER JOIN CIDADE CIDADE_CONJ ON (PESSOA.PES_NATUR_OPCAO_CONJ=CIDADE_CONJ.CID_ID)
Assim conseguir um resultado que dá para prosseguir com o sistema, havendo alguma duvida mais eu volto a postar neste topico
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)