Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

junção esquerda com condição para tabela direita no mysql


Assumindo PRICES.date é um tipo de dados 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

Usei a função DATA para remover a parte do tempo, porque CURRENT_DATE não incluirá a parte do tempo, enquanto os registros DATETIME incluirão.

Neste exemplo, a date os critérios estão sendo aplicados antes o JOIN é feito. É como uma tabela derivada, filtrando as informações antes que o JOIN seja feito - o que produzirá resultados diferentes do que se os critérios fossem especificados na cláusula WHERE.

Para obter a lista de produtos e preços para amanhã, 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)

Referência:

Se você quiser os preços de hoje e de amanhã em uma única consulta, use:
   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)