Ver Mensaje Individual
  #9 (permalink)  
Antiguo 03/07/2008, 06:29
seyko
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: Encapsular consultas

Primero, cometes un fallo general, haces un left join pero luego en el where dice que tabla_del_left_join.id is not null, esto es como hacer un inner join pero perdiendo eficiencia.

prueba esta select (puede que falle algo, la he hecho corriendo)
Código:
select	*
from 	muestra
		join ensayo_muestra					ON ensayo_muestra.muestraid = muestra.muestraid
		left join actas_archivo 			ON actas_archivo.ensayo_muestraid = ensayo_muestra.ensayo_muestraid
where	ensayo_muestra.inactivo IS NULL
		and (acta_clase != 1 or acta_clase is not null)
y me comentas si los resultados son los mismos que
Cita:
SELECT * FROM muestra
LEFT OUTER JOIN (SELECT DISTINCT ensayo_muestra.muestraid
FROM ensayo_muestra WHERE ensayo_muestra.inactivo IS NULL
EXCEPT
SELECT DISTINCT ensayo_muestra.muestraid
FROM ensayo_muestra
JOIN actas_archivo ON actas_archivo.ensayo_muestraid = ensayo_muestra.ensayo_muestraid
WHERE (acta_clase = 1 OR acta_clase IS NULL)
)sin_actas ON sin_actas.muestraid = muestra.muestraid
WHERE sin_actas.muestraid IS NOT NULL
Como la cosa se está complicando, muestra la estructura de las tablas indicadas, dime donde tiene FK, etc...


Cita:
Las variables llevan valor 1 ó 0 en función de un checkbox
Porque no utilizas un boolean?

Cita:
De momento creo que voy a soñar con esta query
No será la última vez... xD

Salu2