Skip site navigation (1) Skip section navigation (2)

Re: consulta de validacion de inexistencia de campos

From: "Marcos Saldivar" <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com>
To: "Gabriel Hermes Colina Zambra" <hermeszambra(at)yahoo(dot)com>
Cc: "List Postgresql" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: consulta de validacion de inexistencia de campos
Date: 2008-03-16 01:19:24
Message-ID: 1c4d91ab0803151819n297088eex929557902e9a55b4@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
El 15/03/08, Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com> escribió:
>
>  --- Marcos Saldivar
>  <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com> escribió:
>
>
>  > Estimad@ de la lista en esta oprtunidad escribo mas
>  > por opiniones que
>  > un problema, ya que tengo el siguiente caso(tipico):
>  >
>  > Para una tabla empleados tengo los campos, rut,
>  > username y
>  > nom_empleado definidos como unicos y not null menos
>  > el username que si
>  > puede ser null ya que un empleado quisas no sea
>  > necesario que ingrese
>  > al sistema que desarrollo. pues bien trabajo en
>  > java(y obvió que con
>  > postgresql 8.3)
>
> En primer lugar esto no tiene que ser obvio.

obvio que nada es obvio, estimado no deseaba molestar a nadie, solo
que me expreso
en mis correos como si lo hiciera con mis colegas o amigos, disculpas
si ofendí alguien...

>
>
>  y al momento de ingresar un nuevo
>  > usuario quiero
>  > validar la inexistencia de los campos que
>  > mencione(podría capturar un
>  > exeception pero creo que no es muy elegante llenar
>  > mi código de try
>  > catch) pero como ya saben la flojera puede mas
>
> Bueno concentrate en una disciplina que te permita
>  desarrollar la perseverancia, la flojera no puede ser
>  una escusa para hacer bien las cosas.

Creo que a la solución que llegue es bastante buena y eficiente para
mi objetivo solo que a menudo pienso que mi opinión no es
suficiente(el proyecto en el que trabajo es personal, así que trabajo
solo y aprobarme a mi mismo es muy fome), me gusta compartir ideas
para llegar a una mejor...

>
>
>  > el
>  > hacer una consulta
>  > por cada campo no me gusto, así que me puse a buscar
>  > una consulta
>  > donde pudiera matar 3 pajaros de un tiro y aunque al
>  > principio buscaba
>  > una consulta que me entregara algo como:
>  >
>  >   rut  | nombre | username
>  >  -----+--------+----------
>  >  si   | no     | si
>  > (1 fila)
>  >
>
> Bien despues de un tiron de oreja, toma la solucion,
>  que seria mejor que la implementaras con una funcion
>  con sql a la que le pases los parametros.
>  Si queres que te ayude en eso pasame la tabla, la
>  vista en un script y te armo un ejemplo
>
>  select case when rut=$1 then 'si' else 'no' end as
>  r_rut,case when nombre=$2 then 'si' else 'no' end as
>  r_nombre,case when username=$3 then 'si' else 'no' end
>  as r_username from vista_empleado
>  where  rut=$1 or nombre=$2 or username=$3
>
>  Ojo podria devolver mas de un registro.
>  Por que donde halla uno que tenga el rut y otro el
>  nombre y otro el usuario, ahi por lo menos tenes 3.

no me gusta esta solución por que como mencionas puede tener has tres
filas de resultados
pero además debe buscar en esas filas que fue lo que coincidió...

>
>  Buena suerte, aunque me parece poco eficiente lo que
>  propnes.

Estimados creo que no me exprese bien, mi consulta va por saber como
harían para solucionar este problema la comunidad, ya que como indique
yo lo solucione con la sentencia  "union", estuve un buen rato
buscando el resultado que yo deseaba que era tener una consulta que
entregara una sola fila con la combinación con los siguientes posibles
resultados, (si,si,si), (si,no,si), (si,si,no), (no,si,si),
(no,no,si), (no,no,no) ya que como indicas con el esquema que me
propones puedes recibir 3 filas(o ninguna) pero no saber que campo fue
el que coincidió y tendría mas trabajo que el que hago ahora con la
solución que yo plantee y que difiere de mi búsqueda donde buscaba una
sola fila 3 columnas y ahora tengo una sola columna y 3 filas
máximo....

Me explico con código:

no quería hacer:

<codigo>
rsemp = st.executeQuery("select rut from vista_empleados where rut = mirut");
rsemp.next();
if(rsemp.getString(1).compareToIgnoreCase(rut) == 0){
}
rsemp.close();
</codigo>

esto repetido por 3, osea por rut, username y nombre_empleado ya que
estos métodos envían exceptions(executeQuery, next y close)


Así que lo solucione con "union" de las 3 consultas, al final siempre
las hago las 3 pero ahora de una sola vez....

rsemp = st.executeQuery(query);
while(rsemp.next()){
	if(rsemp.getString(1).compareToIgnoreCase(rut) == 0){
         swerror = true;
	}else if(rsemp.getString(1).compareToIgnoreCase(nom_empleado) ==
0){				         swerror = true;
	}else if(rsemp.getString(1).compareToIgnoreCase(username.getUsername())
== 0){		         swerror = true;
	}
}
rsemp.close();


Saludos....
>
>  Atte.
>
> Gabriel Colina

In response to

Responses

pgsql-es-ayuda by date

Next:From: Gabriel Hermes Colina ZambraDate: 2008-03-16 02:09:31
Subject: Re: consulta de validacion de inexistencia de campos
Previous:From: Gabriel Hermes Colina ZambraDate: 2008-03-16 00:22:21
Subject: Re: consulta de validacion de inexistencia de campos

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group