Fórum Precisando de ajuda SQL RUIM #430821

10/12/2012

0

DESTA FORMA ELA ME TRAS OS DADOS CERTO MAS PRECISO DOS CAMPOS DAS OUTRAS TABELAS

DESTA FORMA ME TRAZ TAMBÉM OS NOMES DOS CAMPOS

Select P.P_NOME,P_CEP,P_DATANASC,P_CLASCADASTRO,P_ATIVO,
P_FONE,P_ENDCOMPL,P_EMAIL,C.CEP_NOME,B.BAIRRO_NOME,
CI.CIDADE_NOME,E.ESTADO_SIGLA,PA.PAIS_NOME from PESSOA P,
CEP C,BAIRRO B,CIDADE CI, ESTADO E, PAIS PA


WHERE (P.P_CEP = C.ID_CEP)
AND (C.ID_CEP = B.ID_BAIRRO)
AND (CI.CIDADE_COD_ESTADO = E.ID_ESTADO)
AND (E.ESTADO_CODPAIS = PA.ID_PAIS)
ORDER BY P.P_DATANASC


ESTA FUNCIONA MAS ME TRAS OS DADOS NOVE VEZES CADA INSTÂNCIA
SELECT EXTRACT(DAY FROM P_DATANASC),P.P_NOME,P_CEP,P_CLASCADASTRO,P_ATIVO,P_FONE,C.CEP_NOME,B.BAIRRO_NOME,CI.CIDADE_NOME,E.ESTADO_SIGLA,PA.PAIS_NOME
FROM PESSOA P,CEP C, BAIRRO B,CIDADE CI, ESTADO E, PAIS PA
WHERE EXTRACT(MONTH FROM P_DATANASC) = 7

Olá pessoal estou com problemas com esta sql poderiam me ajudar a resolver?
DESTA FORMA ELA ME TRAZ OS NOMES DOS CAMPOS SOMENTE SEM AS DADOS DOS ANIVERSARIANTES

SELECT EXTRACT(DAY FROM P_DATANASC),P.P_NOME,P_CEP,P_CLASCADASTRO,P_ATIVO,P_FONE,C.CEP_NOME,B.BAIRRO_NOME,CI.CIDADE_NOME,E.ESTADO_SIGLA,PA.PAIS_NOME
FROM PESSOA P,CEP C, BAIRRO B,CIDADE CI, ESTADO E, PAIS PA
WHERE EXTRACT(MONTH FROM P_DATANASC) = 7

AND(P.P_CEP = C.ID_CEP)
AND (C.ID_CEP = B.ID_BAIRRO)
AND (CI.CIDADE_COD_ESTADO = E.ID_ESTADO)
AND (E.ESTADO_CODPAIS = PA.ID_PAIS)
ORDER BY P.P_DATANASC

TENTEI COM INNER JOIN DEU O MESMO RESULTADO
Marcelo Augusto

Marcelo Augusto

Responder

Posts

10/12/2012

Marcelo Augusto

DESTA FORMA ELA ME TRAS OS DADOS CERTO MAS PRECISO DOS CAMPOS DAS OUTRAS TABELAS

SELECT EXTRACT(DAY FROM P_DATANASC),P.P_NOME,P_CEP,P_CLASCADASTRO,P_ATIVO,P_FONE
FROM PESSOA P
WHERE EXTRACT(MONTH FROM P_DATANASC) = 7

DESTA FORMA ME TRAZ TAMBÉM OS NOMES DOS CAMPOS

Select P.P_NOME,P_CEP,P_DATANASC,P_CLASCADASTRO,P_ATIVO,
P_FONE,P_ENDCOMPL,P_EMAIL,C.CEP_NOME,B.BAIRRO_NOME,
CI.CIDADE_NOME,E.ESTADO_SIGLA,PA.PAIS_NOME from PESSOA P,
CEP C,BAIRRO B,CIDADE CI, ESTADO E, PAIS PA


WHERE (P.P_CEP = C.ID_CEP)
AND (C.ID_CEP = B.ID_BAIRRO)
AND (CI.CIDADE_COD_ESTADO = E.ID_ESTADO)
AND (E.ESTADO_CODPAIS = PA.ID_PAIS)
ORDER BY P.P_DATANASC


ESTA FUNCIONA MAS ME TRAS OS DADOS NOVE VEZES CADA INSTÂNCIA
SELECT EXTRACT(DAY FROM P_DATANASC),P.P_NOME,P_CEP,P_CLASCADASTRO,P_ATIVO,P_FONE,C.CEP_NOME,B.BAIRRO_NOME,CI.CIDADE_NOME,E.ESTADO_SIGLA,PA.PAIS_NOME
FROM PESSOA P,CEP C, BAIRRO B,CIDADE CI, ESTADO E, PAIS PA
WHERE EXTRACT(MONTH FROM P_DATANASC) = 7

Olá pessoal estou com problemas com esta sql poderiam me ajudar a resolver?
DESTA FORMA ELA ME TRAZ OS NOMES DOS CAMPOS SOMENTE SEM AS DADOS DOS ANIVERSARIANTES

SELECT EXTRACT(DAY FROM P_DATANASC),P.P_NOME,P_CEP,P_CLASCADASTRO,P_ATIVO,P_FONE,C.CEP_NOME,B.BAIRRO_NOME,CI.CIDADE_NOME,E.ESTADO_SIGLA,PA.PAIS_NOME
FROM PESSOA P,CEP C, BAIRRO B,CIDADE CI, ESTADO E, PAIS PA
WHERE EXTRACT(MONTH FROM P_DATANASC) = 7

AND(P.P_CEP = C.ID_CEP)
AND (C.ID_CEP = B.ID_BAIRRO)
AND (CI.CIDADE_COD_ESTADO = E.ID_ESTADO)
AND (E.ESTADO_CODPAIS = PA.ID_PAIS)
ORDER BY P.P_DATANASC

TENTEI COM INNER JOIN DEU O MESMO RESULTADO
Responder

Gostei + 0

11/12/2012

William

Colega qual o relacionamento entre as tabelas?

Se possível poste os campos que tem relação entre as tabelas, fica mais fácil de montar a instrução SQL.
Responder

Gostei + 0

11/12/2012

Marcelo Augusto

Colega qual o relacionamento entre as tabelas?

Se possível poste os campos que tem relação entre as tabelas, fica mais fácil de montar a instrução SQL.

amigo Wllfl
tabela principal Pessoa
- PESSOA
ID_PESSOA
P_NOME
P_CEP FK FK DA TABELA CEP
P_DATANASC
E OUTROS ATRIBUTOS

- CEP
ID_CEP CONSTRAINT ´"PK_CEP"´ PRIMARY KEY (´"ID_CEP"´)
CEP_NOME
CEP_BAI_COD FK DA TABELA BAIRRO
ALTER TABLE "CEP" ADD CONSTRAINT "FK_CEP_DO_BAIRRO" FOREIGN KEY ("CEP_BAI_COD") REFERENCES BAIRRO ("ID_BAIRRO");
- BAIRRO
ID_BAIRRO
BAIRRO_NOME
BAI_COD_CID FK DA TABELA CIDADE E ASSIM POR DIANTE
Responder

Gostei + 0

11/12/2012

William

Colega dá uma olhada nessa instrução, pode ser q alguns campos estejam com nomes diferentes, mas qualquer dúvida post aí novamente:

SELECT P.nome, P.p_cep, P.datanasc, P.ativo, P.fone, C.cep, b.bairro, ci.cidade, E.estado, PA.pais
FROM PESSOA P INNER JOIN CEP C     ON P.p_cep = C.id
              INNER JOIN BAIRRO B  ON c.cep_bai_cod = b.id
              INNER JOIN CIDADE CI ON CI.id = B.bai_cod_cid
              INNER JOIN ESTADO E  ON E.id = CI.estado
              INNER JOIN PAIS PA   ON PA.id = E.pais


Aparentemente está normal e funcionando.
Responder

Gostei + 0

11/12/2012

Marcelo Augusto

oi wllfl, desta forma eu tenho algumas consultas funcionando legal mas o que eu estou precisando no momento é que a consulta me traga além do endereço completo a data nascimento da pessoa para gerar relatório aniversariantes e endereçar correspondência, a consulta para gerar relatorio com os campos da tabela pessoa está postada aí é esta que está abaixo, mas os campos cepnome, nomebairro etc... estão nas outras tabelas.


SELECT EXTRACT(DAY FROM P_DATANASC),P.P_NOME,P_CEP,P_CLASCADASTRO,P_ATIVO,P_FONE
FROM PESSOA P
WHERE EXTRACT(MONTH FROM P_DATANASC) = 7

eu não estou conseguindo juntar as outras tabelas. Valeu qualquer ajuda.
Responder

Gostei + 0

11/12/2012

Claudia Nogueira

Ficou faltando você explicar alguns relacionamentos.
Montei um SQL mais ou menos do jeito que eu entendi a estrutura.

SELECT EXTRACT(DAY FROM P.P_DATANASC) AS DIA_NASC,
       P.P_NOME,
       P.P_CEP,
       P.P_CLASCADASTRO,
       P.P_ATIVO,
       P.P_FONE,
       C.CEP_NOME,
       B.BAIRRO_NOME,
       CI.CIDADE_NOME,
       E.ESTADO_SIGLA,
       PA.PAIS_NOME
FROM PESSOA P
LEFT OUTER JOIN CEP C ON (P.P_CEP = C.ID_CEP)
LEFT OUTER JOIN BAIRRO B ON (C.CEP_BAI_COD = B.ID_BAIRRO)
LEFT OUTER JOIN CIDADE CI ON (B.BAI_COD_CID = CI.ID_CIDADE)
LEFT OUTER JOIN ESTADO E ON (CI.CIDADE_COD_ESTADO = E.ID_ESTADO)
LEFT OUTER JOIN PAIS PA ON (E.PAIS_COD_PAIS = PA.ID_PAIS)
ORDER BY P.P_DATANASC


Usei o LEFT OUTER JOIN, pois se você não trabalhar com FK, alguma tabela pode não ter o relacionamento, sendo assim, não vai influenciar no resultado.

Onde está LEFT OUTER JOIN CEP C ON (P.P_CEP = C.ID_CEP) eu entendi que o campo P_CEP da pessoa é chave da tabela CEP
Onde está LEFT OUTER JOIN BAIRRO B ON (C.CEP_BAI_COD = B.ID_BAIRRO) eu entendi que CEP_BAI_COD é a chave da tabela BAIRRO
Onde está LEFT OUTER JOIN CIDADE CI ON (B.BAI_COD_CID = CI.ID_CIDADE) eu entendi que BAI_COD_CID é a chave da tabela CIDADE
Onde está LEFT OUTER JOIN ESTADO E ON (CI.CIDADE_COD_ESTADO = E.ID_ESTADO) eu entendi que CIDADE_COD_ESTADO é a chave da tabela estado, porém não tenho certeza se é esse nome mesmo, se não for tem que trocar o CI.CIDADE_COD_ESTADO pelo nome correto do campo na tabela CIDADE
Onde está LEFT OUTER JOIN PAIS PA ON (E.PAIS_COD_PAIS = PA.ID_PAIS) eu entendi que PAIS_COD_PAIS é a chave da tabela PAIS, se não for tem que trocar E.PAIS_COD_PAIS pelo nome certo do campo chave da tabela PAIS na tabela ESTADO.

Obs.: Provavelmente tenha erros de digitação.


Responder

Gostei + 0

11/12/2012

William

Bom acho q assim vai funcionar então:

SELECT P.p_nome , P.p_cep, EXTRACT(DAY FROM P.p_datanasc) AS DIA, P.p_fone, C.cep, b.bairro, ci.cidade, E.estado, PA.pais
FROM PESSOA P INNER JOIN CEP C ON P.p_cep = C.id
INNER JOIN BAIRRO B ON c.cep_bai_cod = b.id
INNER JOIN CIDADE CI ON CI.id = B.bai_cod_cid
INNER JOIN ESTADO E ON E.id = CI.cid_cod_uf
INNER JOIN PAIS PA ON PA.id = E.uf_cod_pais
WHERE EXTRACT(MONTH FROM P.p_datanasc) = 11


Usei uma condição quando mês igual à 11 na cláusula WHERE, o nomes de campos podem estar diferentes.
Responder

Gostei + 0

11/12/2012

Marcelo Augusto

desta forma funcionou perfeitamente
Obribado a todos do devi media especialmente a claudia dnh e willfll pela ajuda


SELECT EXTRACT(DAY FROM P.P_DATANASC) AS DIA_NASC,
P.P_NOME,
P.P_CEP,
P.P_CLASCADASTRO,
P.P_ATIVO,
P.P_FONE,
C.CEP_NOME,
B.BAIRRO_NOME,
CI.CIDADE_NOME,
E.ESTADO_SIGLA,
PA.PAIS_NOME
FROM PESSOA P
LEFT OUTER JOIN CEP C ON (P.P_CEP = C.ID_CEP)
LEFT OUTER JOIN BAIRRO B ON (C.CEP_BAI_COD = B.ID_BAIRRO)
LEFT OUTER JOIN CIDADE CI ON (B.BAIRRO_COD_CID = CI.ID_CIDADE)
LEFT OUTER JOIN ESTADO E ON (CI.CIDADE_COD_ESTADO = E.ID_ESTADO)
LEFT OUTER JOIN PAIS PA ON (E.Estado_CODPAIS = PA.ID_PAIS)
WHERE EXTRACT(MONTH FROM P_DATANASC) = 7
ORDER BY P.P_DATANASC
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar