sql >> Base de Datos >  >> RDS >> Mysql

combinación izquierda con condición para la tabla derecha en mysql

Asumiendo PRICES.date es un tipo de datos DATETIME, use:

   SELECT pd.id, 
          pd.name, 
          pr.price
     FROM PRODUCTS pd
LEFT JOIN PRICES pr ON pr.id = pd.id
                   AND DATE(pr.date) = CURRENT_DATE

Usé la función FECHA para eliminar la parte de la hora, porque CURRENT_DATE no incluirá la porción de tiempo mientras que los registros DATETIME sí lo harán.

En este ejemplo, la date los criterios se están aplicando antes se realiza el JOIN. Es como una tabla derivada, filtrando la información antes de realizar la UNIÓN, lo que producirá resultados diferentes que si el criterio se especificara en la cláusula WHERE.

Para obtener la lista de productos y precios para mañana, use:

   SELECT pd.id, 
          pd.name, 
          pr.price
     FROM PRODUCTS pd
LEFT JOIN PRICES pr ON pr.id = pd.id
                   AND DATE(pr.date) = DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY)

Referencia:

Si desea los precios de hoy y de mañana en una sola consulta, utilice:

   SELECT pd.id, 
          pd.name, 
          pr1.price AS price_today,
          pr2.price AS price_tomorrow
     FROM PRODUCTS pd
LEFT JOIN PRICES pr1 ON pr1.id = pd.id
                   AND DATE(pr1.date) = CURRENT_DATE
LEFT JOIN PRICES pr2 ON pr2.id = pd.id
                   AND DATE(pr2.date) = DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY)