|
Creo que se os pasa algo por alto.
En cierta ocasión me plantearon algo similar, pero en un hospital, y la solución fue crear una tabla temporal. Esa tabla temporal se iba llenando poco a poco con los datos de las otras tablas, siempre era unión de tabla pacientes (en este caso alumnos) con el resto de las demás, una a una, ya que si una de ellas no tiene datos, la unión de todas ellas te viene a dar un conjunto vacío.
Algo así como
create table LoQueSea(campos tipos);
insert into LoQueSea select MismosCampos from alumnos a, OtraTabla O where a.id=o.idalumno
insert into LoQueSea select MismosCampos from alumnos a, OtraTablaX O where a.id=o.idalumno
y por ultimo sería un
select * from LoQueSea where SiHayCondicion order by SiHayOrdenación
Es un poco más complejo pero que seguro que evita errores de "este dato está en esta tabla pero no en esta otra". Tal como lo planteo, en caso de que una unión sea vacía, no afecta al resto de uniones.
PD: También se puede plantear usando la cláusula UNION en vez de la tabla temporal, pero en este último caso hay que ir con cuidado con la select planteada ya que es demasiado compleja. Mi solución te permite encontrar un posible fallo de una manera más fácil.
|