Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/02/2015, 02:58
barbel
 
Fecha de Ingreso: septiembre-2012
Ubicación: Pontevedra
Mensajes: 48
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: LEFT JOIN con condiciones en ambas columnas, sentencia algo compleja..

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. SELECT * FROM productos P
  2. LEFT JOIN preciopromocional PP ON P.id = PP.idproducto
  3.     P.categoria = 1  AND
  4.     (CURDATE() BEWEEN PP.comienzo AND PP.fin
  5.     OR PP.idproducto IS NULL);

No me sirve. Esa sentencia habia llegado yo, pero falla en aquellos registros que EXISTEN en preciopromocional pero no estan activos actualmente, por ejemplo, en las tablas de arriba el registro con idproducto 5, no lo devolveria en cualquier caso, dado que no se cumplen ninguna de las 2 condiciones (CURRDATE no se encuentra entre las fechas actuales, y idproducto 5 no es nulo, ya que existen 2 registros que satisfacen eso...).

Por lo tanto al recuperar los productos, el producto 5 no me lo devuelve.

Tambien hice ya ayer la evolución logica de esta sentencia que es añadir la posibilidad de que existan y se encuentren fuera de fechas,

Código MySQL:
Ver original
  1. SELECT * FROM productos P
  2. LEFT JOIN preciopromocional PP ON P.id = PP.idproducto
  3.     P.idcategoria = 1  AND
  4.     (CURDATE() BETWEEN PP.comienzo AND PP.fin
  5.     OR
  6.     (PP.idproducto IS NULL OR CURDATE() NOT BETWEEN PP.comienzo AND PP.fin))

pero en en ese caso, devuelve TODO. Tanto los que estan en periodo promocional como los que no, si un producto tiene 5 registros en preciopromocional, de 3 promociones pasadas, una presente y otra futura, devuelve ese producto 5 veces, una para cada preciopromocional, por lo que no me sirve.
Lo que necesitaria es que si no se cumple la condición de currdate() between inicio y fin, devuelva solo la tabla productos, sin coger nada de la tabla preciopromocional para ese porducto(que por lo tanto a mi me llegaria como NULLS).

Gracias de todas formas, pero me parece a mi que lo que pido es imposible :_)

Última edición por barbel; 03/02/2015 a las 03:43