Fórum Oracle query não funciona direito #416102
01/05/2012
0
são 5 tabelas pessoa cep bairro cidade estado pais a sql efetua pesquisa no cadastro de pessoa e nas outras fk
mas preciso que me retorne classsificado por pessoa, alguem pode me ajudar? o banco de dados é oracle
SELECT P.NOME,CLAS_CADASTRO,C.ID_CEP,CEP_NOME,B.BAIRRO_NOME,
CI.CIDADE_NOME,E.ESTADO_NOME,PA.PAIS_NOME FROM PESSOA P,
CEP C, BAIRRO B,CIDADE CI,ESTADO E,PAIS PA where p.clas_cadastro in(Select p.Clas_cadastro from pessoa where p.clas_cadastro = Membro)
WHERE (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
Marcelo Augusto
Curtir tópico
+ 0Posts
01/05/2012
Danielle Lemos
Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
Gostei + 0
01/05/2012
Marcelo Augusto
Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
desta forma também não funcionou
SELECT P.NOME,CLAS_CADASTRO where p.clas_cadastro =Membro,C.ID_CEP,CEP_NOME,B.BAIRRO_NOME,
CI.CIDADE_NOME,E.ESTADO_NOME,PA.PAIS_NOME FROM PESSOA P,
CEP C, BAIRRO B,CIDADE CI,ESTADO E,PAIS PA
WHERE (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
Gostei + 0
01/05/2012
Marcelo Augusto
Não Membro é um atributo da tabela pessoa que pode ser um usuário,Missionário ou membro ou pastor ou cliente ou fornecedor e outros
Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
desta forma também não funcionou
SELECT P.NOME,CLAS_CADASTRO where p.clas_cadastro =Membro,C.ID_CEP,CEP_NOME,B.BAIRRO_NOME,
CI.CIDADE_NOME,E.ESTADO_NOME,PA.PAIS_NOME FROM PESSOA P,
CEP C, BAIRRO B,CIDADE CI,ESTADO E,PAIS PA
WHERE (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
Gostei + 0
03/05/2012
Jair N.
SELECT P.NOME
, CLAS_CADASTRO
, C.ID_CEP,CEP_NOME
, B.BAIRRO_NOME
, CI.CIDADE_NOME
, E.ESTADO_NOME,PA
, PAIS_NOME
FROM PESSOA P
, CEP C
, BAIRRO B
, CIDADE CI
, ESTADO E
, PAIS PA
WHERE p.clas_cadastro IN (SELECT PE.Clas_cadastro
FROM pessoa PE
WHERE (PE.clas_cadastro = p.Membro))
AND (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
ORDER BY P.NOME
Gostei + 0
03/05/2012
Marcelo Augusto
SELECT P.NOME
, CLAS_CADASTRO
, C.ID_CEP,CEP_NOME
, B.BAIRRO_NOME
, CI.CIDADE_NOME
, E.ESTADO_NOME,PA
, PAIS_NOME
FROM PESSOA P
, CEP C
, BAIRRO B
, CIDADE CI
, ESTADO E
, PAIS PA
WHERE p.clas_cadastro IN (SELECT PE.Clas_cadastro
FROM pessoa PE
WHERE (PE.clas_cadastro = p.Membro))
AND (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
ORDER BY P.NOME
Valeu Jair desta forma funcionou so mudei 2 coisas mas é normal
SELECT P.NOME
, CLAS_CADASTRO
, C.ID_CEP,CEP_NOME
, B.BAIRRO_NOME
, CI.CIDADE_NOME
, E.ESTADO_NOME
,PA.PAIS_NOME
FROM PESSOA P
, CEP C
, BAIRRO B
, CIDADE CI
, ESTADO E
, PAIS PA
WHERE p.clas_cadastro IN (SELECT PE.Clas_cadastro
FROM pessoa PE
WHERE (PE.clas_cadastro = Membro))
AND (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
ORDER BY P.NOME
Gostei + 0
03/05/2012
Marcelo Augusto
SELECT P.NOME
, CLAS_CADASTRO
, C.ID_CEP,CEP_NOME
, B.BAIRRO_NOME
, CI.CIDADE_NOME
, E.ESTADO_NOME,PA
, PAIS_NOME
FROM PESSOA P
, CEP C
, BAIRRO B
, CIDADE CI
, ESTADO E
, PAIS PA
WHERE p.clas_cadastro IN (SELECT PE.Clas_cadastro
FROM pessoa PE
WHERE (PE.clas_cadastro = p.Membro))
AND (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
ORDER BY P.NOME
Valeu Jair desta forma funcionou so mudei 2 coisas mas é normal
SELECT P.NOME
, CLAS_CADASTRO
, C.ID_CEP,CEP_NOME
, B.BAIRRO_NOME
, CI.CIDADE_NOME
, E.ESTADO_NOME
,PA.PAIS_NOME
FROM PESSOA P
, CEP C
, BAIRRO B
, CIDADE CI
, ESTADO E
, PAIS PA
WHERE p.clas_cadastro IN (SELECT PE.Clas_cadastro
FROM pessoa PE
WHERE (PE.clas_cadastro = Membro))
AND (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
ORDER BY P.NOME
Gostei + 0
22/05/2012
Marcelo Augusto
SELECT P.NOME
, CLAS_CADASTRO
, C.ID_CEP,CEP_NOME
, B.BAIRRO_NOME
, CI.CIDADE_NOME
, E.ESTADO_NOME,PA
, PAIS_NOME
FROM PESSOA P
, CEP C
, BAIRRO B
, CIDADE CI
, ESTADO E
, PAIS PA
WHERE p.clas_cadastro IN (SELECT PE.Clas_cadastro
FROM pessoa PE
WHERE (PE.clas_cadastro = p.Membro))
AND (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
ORDER BY P.NOME
Valeu Jair desta forma funcionou so mudei 2 coisas mas é normal
SELECT P.NOME
, CLAS_CADASTRO
, C.ID_CEP,CEP_NOME
, B.BAIRRO_NOME
, CI.CIDADE_NOME
, E.ESTADO_NOME
,PA.PAIS_NOME
FROM PESSOA P
, CEP C
, BAIRRO B
, CIDADE CI
, ESTADO E
, PAIS PA
WHERE p.clas_cadastro IN (SELECT PE.Clas_cadastro
FROM pessoa PE
WHERE (PE.clas_cadastro = Membro))
AND (P.ID_CEP = C.ID_CEP)
AND (C.CEP_BAI_COD = B.BAIRRO_CODIGO)
AND (B.BAIRRO_COD_CID = CI.CIDADE_CODIGO)
AND (CI.CIDADE_COD_ESTADO = E.ESTADO_CODIGO)
AND (E.ESTADO_CODPAIS = PAIS_COD)
ORDER BY P.NOME
valeu pessoal resolvido !!
cadastrados
Gostei + 0
12/06/2012
Alexsandro Bandeira
Desta forma o select ficará lento!
Seria mais apropriado usar exists
Gostei + 0
12/06/2012
Deivison Melo
link:
http://oracleblues.blogspot.com.br/2007/02/diferena-entre-o-in-e-o-exists.html
Gostei + 0
15/06/2012
Alexsandro Bandeira
Porém é possível adaptar a quary para usar o exists.
Gostei + 0
15/06/2012
Alexsandro Bandeira
após a clausula from, faça um sub select, nele faça o exist trazendo o que vc quer.
retorne a reposta dele no select principal.
desta forma
select
selext.info1,
selext.info2
from
( select t.info1, info2 from tabela t where exist ( pega o que eu quero ) ) select;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)