Off - dúvida com sql

9 respostas
K

Olá pessoal… não estou conseguindo realizar a seguinte consulta:

Na tabela de enderecos eu tenho os campos:
localidade e cidade

O usuário só poderá escolher um ou outro na tela para cadastrar…

Eu quero realizar um consulta que me traga tudo da tabela endereço independente da localidade ou cidade estar preenchida…(lembrando que pelo menos um dos dois campos estará preenchido)

Tabela de endereços:

CREATE TABLE enderecos ( oid_endereco int4 NOT NULL DEFAULT nextval('SQC_ENDERECOS'::text), tp_ender int4, nm_logr varchar(100), numero varchar(10), compl varchar(50), bairro varchar(100), cep varchar(10), cidade int4, localidade int4, oid_candidato int4, CONSTRAINT enderecos_pkey PRIMARY KEY (oid_endereco), CONSTRAINT fk_end_cidade FOREIGN KEY (cidade) REFERENCES cidades (cd_ibge_cid) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT fk_end_loca FOREIGN KEY (localidade) REFERENCES localidades (oid_local) ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT fk_end_pes FOREIGN KEY (oid_candidato) REFERENCES candidatos (oid_candidato) ON UPDATE NO ACTION ON DELETE NO ACTION )

Como posso fazer isso ? estou utilizando o PostgreSQL

Muito Obrigado!

9 Respostas

K

Oi…

vc poderia usar

select * from enderecos where cidade = ? or localidade = ?

o caractere ? vc troca pelo valor do campo.

Ou nesse seu caso eu verificaria em linha de código em qual campo o usuário solicitou a pesquisa, se for no de cidade, faria :
select * from enderecos where cidade = ?

se fosse no de localidade:
select * from enderecos where localidade = ?

Espero ter ajudado

kina

Como é a query realizada?
Vc tem uma foreign key com o candidato (na modelagem).
Não entendi o que vc quis dizer com traga tudo.
Faça um relacionamento do seu candidato com a Foreign Key!

K

kina:
Como é a query realizada?
Vc tem uma foreign key com o candidato (na modelagem).
Não entendi o que vc quis dizer com traga tudo.
Faça um relacionamento do seu candidato com a Foreign Key!

A query realizada é:

SELECT e.*, c.cd_ibge_cid, u.cd_ibge, p.cd_pais FROM enderecos e, cidades c, unidades_federacao u, paises p WHERE oid_candidato = 95 and e.cidade = c.cd_ibge_cid and c.uf = u.cd_ibge and u.pais = p.cd_pais

tenho relacionamentos com cidades, unidades de federação e paises…
pois preciso trazer a cidade, UF e pais do endreço!

só que o sql acima só lista alguma coisa caso, tenha alguma cidade cadastrada na tabela de endereços, ou seja, se o usuário tiver cadastrado uma localidade… a consulta não vai retornar nada…

Obrigado!

kina

Vc tem que fazer o relacionamento pela cidade?
A tabela Localidades tem relacionamento com o que?
Tente usar CASE!

SELECT e.*, c.cd_ibge_cid, u.cd_ibge, p.cd_pais
 FROM enderecos e, cidades c, unidades_federacao u, paises p
 WHERE oid_candidato = 95
 and (SELECT CASE e.cidade WHEN null THEN e.localidade ELSE e.cidade) = c.cd_ibge_cid
 and c.uf = u.cd_ibge
 and u.pais = p.cd_pais
K

kina:
Vc tem que fazer o relacionamento pela cidade?
A tabela Localidades tem relacionamento com o que?
Tente usar CASE!

SELECT e.*, c.cd_ibge_cid, u.cd_ibge, p.cd_pais FROM enderecos e, cidades c, unidades_federacao u, paises p WHERE oid_candidato = 95 and (SELECT CASE e.cidade WHEN null THEN e.localidade ELSE e.cidade) = c.cd_ibge_cid and c.uf = u.cd_ibge and u.pais = p.cd_pais

humm… o CASE, THEN E ELSE funcionam no postgre ???

Obrigado!

kina

Sim…
É do postgresql.
Tenta ai

K

kina:
Sim…
É do postgresql.
Tenta ai

não funcionou… :cry:
tá dando erro de sintaxe…

kina

Desculpe coloque no final do select case end:: numeric;

K

OK, agora funcionou… mas não retornou nada

Obrigado!

Criado 7 de julho de 2005
Ultima resposta 7 de jul. de 2005
Respostas 9
Participantes 3