Fórum Precisando de ajuda SQL RUIM #430821
10/12/2012
0
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
Curtir tópico
+ 0Posts
10/12/2012
Marcelo Augusto
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
Gostei + 0
11/12/2012
William
Se possível poste os campos que tem relação entre as tabelas, fica mais fácil de montar a instrução SQL.
Gostei + 0
11/12/2012
Marcelo Augusto
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
Gostei + 0
11/12/2012
William
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.
Gostei + 0
11/12/2012
Marcelo Augusto
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.
Gostei + 0
11/12/2012
Claudia Nogueira
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.
Gostei + 0
11/12/2012
William
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.
Gostei + 0
11/12/2012
Marcelo Augusto
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)