Vovlamos a esto que mencionas:
Cita: Por lo tanto nos encontramos en esta situación, en la primera tabla tenemos los productos, y en la segunda los precios promocionales vinculados a esos productos. Puede ser que tenga 1 precio promocional y que este en vigor (la fecha actual este comprendida entre la fecha de inicio y fin), que tenga varios precios promocionales (aunque solo 1 en vigor), que no tenga ningun precio promocional y que por lo tanto ni aparezca en la tabla....
La única condición que controlo yo por programación es que NUNCA puede tener 2 precios promocionales en vigor al mismo tiempo. Al introducir uno, ese rango de fechas se anula y no se puede introducir ningún registro cuyas fechas contenga o este contenida por las fechas ya registradas.
Según se entiende entonces:
- Todo producto tiene un precio base, ese precio se encuentra en la tabla de Productos.
- Cada producto puede tener cero (0) o muchos precios promocionales.
- Cada precio promocional sólo puede tener vigencia en un determinado período.
- No existen solapamientos de periodos en los precios promocionales.
- Necesitas que la consulta te devuelva el precio promocional vigente, o bien el precio base si no existe, para una fecha dada...
Si eso es correcto, la consulta tiene dos limitantes:
- No puedes invocar la tabla en forma genérica, sino que debes indicar cada campo en forma específica.
- El precio a obtener requiere la aplicación de funciones.
Código MySQL:
Ver original P.nombre,
IFNULL(PP.preciopromocional
, P.precio
) PrecioLista
, P.iva,
P.descripcion,
P.activo
LEFT JOIN preciopromocional PP
ON P.id
= PP.idproducto