viernes, 22 de julio de 2005

Encaje de bolillos

Llevo unas semanas con un proyecto que se trata de generar un "simple" informe, pero que me ha hecho trabajar a fondo con el lenguaje SQL y he "descubierto" cosas bastante chulas. Por ejemplo, de todos es sabido (digo yo) que se pueden combinar dos tablas, así:

select * from Tabla1 t1
join Tabla2 t2
on t2.campo1 = t1.campo1
order by t1.campo2


Y puede también que sepamos cómo hacer una subconsulta:

select * from (
select campo1, campo2, campo3
from Tabla1
group by campo3, campo2
)


El caso es que según te van pidiendo cosas, el tema se complica (evidentemente). Un ejemplo es ésta consulta que averigua qué códigos postales están cubiertos por más de una oficina. Viene siendo (simplificada) algo parecido a esto:

select distinct o.Provincia, o.descripcion, p.Oficina, s1.CPostal
from (
select count(distinct p1.Oficina) Ofic, p1.cppob CPostal
from poblaciones p1 group by p1.cppob) as s1
join poblaciones p on p.cppob = s1.CPostal
join oficinas o on o.codofi = p.Oficina
where s1.Ofic > 1
order by s1.CPostal, p.Oficina


Es decir, estamos haciendo un join con una subconsulta, utilizándola como si de una tabla más se tratase!

Si lo pensamos, tiene toda la lógica del mundo. Una tabla no es más que un conjunto de registros y campos... y una consulta lo que devuelve es exactamente lo mismo. Luego si pensamos en tablas y en consultas no como tales sino como "Datasets", la luz aparece al final del túnel.

Por cierto, pese a lo que comentaba en el primer post del blog, sigo trabajando con ese magnífico lenguaje que es Delphi, al que podríamos llamar sin temor a equivocarnos el "hermano mayor" de C# (cronológicamente hablando, al menos), que para algo son hijos del mismo padre. Sin embargo no pierdo de vista el universo .NET, ya que es hacia donde camina, inevitablemente ya, el mundillo del software.

No hay comentarios: