Cita:
Iniciado por Gabo77 PequeñoMauro tiene razon, solo algunas observaciones:
En la consulta pones Ofertas.*, esto no es conveniente, y menos en un UNION mejor identifica los campos que vas a necesitar de la tabla Ofertas,
Use esto ya que es uan tabla con mas de 30 campos, la base de datos que me encontre es horrible, pero de momento no puedo reformarla.
Cita:
Iniciado por Gabo77 haces un Join contra la tabla Contratacion_Servicios, y no muestras info de esta, te aconsejo que evites al máximo las clausulas Joins ya que son muy pesadas para el servidor por que utilizan tablas temnporales para evaluar el conjunto de resultados, mejor utiliza un EXISTS y veras la mejora en el rendimiento de tu consulta
Ok. No sabia esto, asi que he estado investigando y reforme la consulta como me dijiste, quedo así, por si el ejemplo le sirve a alguien:
Código:
SELECT Ofertas.*, Empresas.Nombre
FROM Ofertas
INNER JOIN Empresas
ON Ofertas.ID_Empresa = Empresas.ID_EMPRESA
WHERE ((ofertas.tipo_oferta = 1)
AND EXISTS(
select *
from Contratacion_Destinos
where Ofertas.ID_DESTINO = Contratacion_Destinos.ID_DESTINO
AND Contratacion_Destinos.Activo = 1
AND (Contratacion_Destinos.FechaProrroga > GETDATE())
AND EXISTS(
select *
from Contratacion_Servicios
where Contratacion_Destinos.ID_PARAMETRO = Contratacion_Servicios.ID_PARAMETRO
AND (UPPER(Contratacion_Servicios.Parametro) = 'OFERTADESTACADAS'
OR UPPER(Contratacion_Servicios.Parametro) = 'OFERTADESTACADAM')
)
))
y para terminar con el union, solo tuve que agregar al final esta linea.
Código:
OR (Ofertas.id_tipo=12 AND Ofertas.oferta_archivada=0)
ORDER BY Ofertas.Fecha DESC
Quedando todo mucho más limpio y como decias mejor rendimiento.
Muchas gracias a los dos.
PD: Aprendí mucho con esta consulta, cambiaré un montón de procedimientos almacenados en el servidor gracias a esto.