Ver Mensaje Individual
  #11 (permalink)  
Antiguo 04/07/2008, 02:55
seyko
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 3 meses
Puntos: 13
Respuesta: Encapsular consultas

Cita:
Iniciado por darthsmog Ver Mensaje
Utilizo el LEFT OUTER porque la variable que le paso (que en la simplificación he omitido) en el OR de la condición, hace que, si el usuario quiere, puede aplicar el filtro o no. Si utilzo INNER JOIN, me omitirá directamente los valores nulos.
ok, pero tambien podías haber comentado antes que esa select no está completa

Cita:
Voy a tratar de explicar un poquito para qué utilizo esto, a ver si existe otro camino más sencillo, que yo le he dado tantas vueltas que seguro que lo he liado:

Trabajo en un programa para un laboratorio, en el que el elemento esencial es una muestra, almacenado en la tabla muestra con algunas de sus propiedades.

Cada muestra puede tener de 0 a n ensayos, guardados en la tabla ensayos_muestra, con el identificador de la muestra (muestraid). La columna estadoalbaran = 0 (o vacía) en esta tabla nos indica que un ensayo aún no ha sido enviado a facturar.

Cada ensayo puede emitir de 0 a n actas. Las actas emitidas se almacenan en la tabla actas_archivo, con el identificador del ensayo (ensayo_muestraid). Los documentos guardados en actas_archivo pueden ser de muchos tipos, sólo nos interesan los que tienen el campo acta_clase = 1 (o vacío).

Bien. Ahora el objetivo era crear en el programa en java una consulta para hacer una revisión de muestras, de modo que podamos (entre otras cosas) saber qué muestras...

- Contienen algún ensayo que aún no han sido facturados (lo que atacamos en la primera subconsulta)
- Contienen algún ensayo que no tenga acta emitida (no exista entrada en la tabla actas_archivo que se relacione con ningún ensayo de la muestra) (lo que atacábamos en la segunda subconsulta)

El resultado de la consulta se mostrará en una tabla. Y estos dos campos se representan la tabla como un Checkbox, indicando si la muestra está o no facturada (todos sus ensayos) y tiene o no ensayos pendientes. Para activar o desactivar el Checkbox, básicamente, analizo si el campo es vacío o no. Por lo que el valor que contenga el mismo nos es indiferente, siempre y cuando sea vacío cuando no se cumpla, y tenga un valor no nulo en caso contrario.

Aparte el usuario puede elegir mostrar todas las muestras, o filtrar por "pendientes de facturar" y además por "con ensayos pendientes", que es a lo que hacen referencia los WHERE pendientes.muestraid IS NULL OR Variable1 = 0, de modo que se muestran todas si la variable contiene valor 0 o se aplica el filtro cuando tiene otro valor.

Las dos subconsultas obtienen, respectivamente una lista de las muestras que cumplen las condiciones de los dos filtros.

Bueno, no se si lo he liado más. El caso es que esta query me está trayendo por la calle de la amargura ^^

Intuyo que lo tendré que dejar para que lo soluccione mi yo del futuro.

Si se os ocurre algo.. os pongo una estatua.

¡Un saludo y muchas gracias!
Vale hoy estoy un poco más liado que ayer, pero es "facil" ;), intentaré sacar un rato a lo largo de la mañana.

Salu2