Oracle query não funciona direito

Oracle

01/05/2012

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)
Marcelo Augusto

Marcelo Augusto

Curtidas 0

Respostas

Danielle Lemos

Danielle Lemos

01/05/2012

Membro seria um parametro ?

Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
GOSTEI 0
Marcelo Augusto

Marcelo Augusto

01/05/2012

Membro seria um parametro ?

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

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 ?




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.

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
GOSTEI 0
Marcelo Augusto

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




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

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




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

Só que no delphi não deu certo ele não filtra por membro ele me tras todos os tipos de Clas_cadastro cadastrados
GOSTEI 0
Marcelo Augusto

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




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

Só que no delphi não deu certo ele não filtra por membro ele me tras todos os tipos de Clas_cadastro



valeu pessoal resolvido !!
cadastrados
GOSTEI 0
Alexsandro Bandeira

Alexsandro Bandeira

01/05/2012

Pessoal,

Desta forma o select ficará lento!

Seria mais apropriado usar exists

GOSTEI 0
Deivison Melo

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
GOSTEI 0
Alexsandro Bandeira

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.


GOSTEI 0
Alexsandro Bandeira

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;
GOSTEI 0
POSTAR