Oracle query não funciona direito
esta sql funciona se tiramos a clausula que esta em minuúsculo
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)
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
Curtidas 0
Respostas
Danielle Lemos
01/05/2012
Membro seria um parametro ?
Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
GOSTEI 0
Marcelo Augusto
01/05/2012
Membro seria um parametro ?
Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
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
Marcelo Augusto
01/05/2012
Membro seria um parametro ?
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 ?
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
Jair N.
01/05/2012
Veja nesse contexto, quem é a tabela que seja o campo membro por dedução achei que fosse a própria P pessoa?
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
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
Marcelo Augusto
01/05/2012
Veja nesse contexto, quem é a tabela que seja o campo membro por dedução achei que fosse a própria P pessoa?
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
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
Marcelo Augusto
01/05/2012
Veja nesse contexto, quem é a tabela que seja o campo membro por dedução achei que fosse a própria P pessoa?
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
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
Marcelo Augusto
01/05/2012
Veja nesse contexto, quem é a tabela que seja o campo membro por dedução achei que fosse a própria P pessoa?
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
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
Alexsandro Bandeira
01/05/2012
Pessoal,
Desta forma o select ficará lento!
Seria mais apropriado usar exists
Desta forma o select ficará lento!
Seria mais apropriado usar exists
GOSTEI 0
Deivison Melo
01/05/2012
Dá uma olhada nesse tópico e depois de ler e entender verá a diferença entre o IN e o EXISTS !!!
link:
http://oracleblues.blogspot.com.br/2007/02/diferena-entre-o-in-e-o-exists.html
link:
http://oracleblues.blogspot.com.br/2007/02/diferena-entre-o-in-e-o-exists.html
GOSTEI 0
Alexsandro Bandeira
01/05/2012
É claro que se trocasse-mos o In pelo exists ocorrerá erro de sintaxe na query!
Porém é possível adaptar a quary para usar o exists.
Porém é possível adaptar a quary para usar o exists.
GOSTEI 0
Alexsandro Bandeira
01/05/2012
Primeiro,
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;
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