08 julio 2005

consulta de sql

Un pequeño truco tonto que he aprendido.
A veces tenemos dos consultas a bases de datos sobre tablas distintas, pero que nos dan bastantes campos comunes. Sin embargo, en una de las consultas aparecen, por ejemplo, un par de campos distintos que en la otra.
Supongamos que queremos una tabla de deportistas. Los datos de ellos son comunes, pero la mejor marca es distinta en función del deporte que hagan: para corredores, la mejor marca va en segundos, en minutos, etc. Para los saltadores de longitud y altura, va en metros y para los gimnastas son puntos. Imaginemos que los select que hay que hacer son de este estilo

select nombre, deporte, mejor_tiempo... para los deportistas
select nombre,deporte,mejor_distancia... para los saltadores
select nombre,deporte,mejor_puntuacion para los gimnastas

Imaginemos también que queremos meter todo esto en la misma tabla y que nos interesaría que los ResultSet que devuelve java tuvieran las mismas columnas, para tratarlos igual.

El truco consiste en que podemos poner null en los campos seleccionados en la consulta, de forma que nos devolverá null en esas columnas. De esta forma, con estas consultas

select nombre, deporte, mejor_tiempo,null,null ...
select nombre,deporte,null,mejor_distancia,null ...
select nombre,deporte,null,null,mejor_puntuacion ...


Nos devolverán el mismo tipo de ResultSet, pero con los "huecos" ya preparados cuando un determinado campo no tiene sentido. Los tres ResulSet podemos tratarlos con el mismo código y añadirlos fácilmente a la misma tabla.

Por supuesto, este "truco" tiene sentido si mejor_tiempo, mejor_distancia y mejor_puntuacion pertenecen a tablas de base de datos distintas que estén ligada a la tabla de deportistas. Si todo fueran campos de la misma tabla, los huecos ya estarían en la tabla y lo arreglaríamos fácilmente con una única consulta

select nombre,deporte,mejor_tiempo, mejor_distancia, mejor_puntuacion ...

No hay comentarios: