Fórum Oracle query não funciona direito #416102

01/05/2012

0

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

Responder

Posts

01/05/2012

Danielle Lemos

Membro seria um parametro ?

Pq nao coloca o where p.clas_cadastro = Membro como clausula no select principal ?
Responder

Gostei + 0

01/05/2012

Marcelo Augusto

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)
Responder

Gostei + 0

01/05/2012

Marcelo Augusto

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)
Responder

Gostei + 0

03/05/2012

Jair N.

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
Responder

Gostei + 0

03/05/2012

Marcelo Augusto

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

Responder

Gostei + 0

03/05/2012

Marcelo Augusto

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
Responder

Gostei + 0

22/05/2012

Marcelo Augusto

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
Responder

Gostei + 0

12/06/2012

Alexsandro Bandeira

Pessoal,

Desta forma o select ficará lento!

Seria mais apropriado usar exists

Responder

Gostei + 0

12/06/2012

Deivison Melo

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
Responder

Gostei + 0

15/06/2012

Alexsandro Bandeira

É 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.


Responder

Gostei + 0

15/06/2012

Alexsandro Bandeira

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;
Responder

Gostei + 0

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

Aceitar