SELECT
*,
p.name AS name,
p.image,
p.price,
(
SELECT ps.price
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS special_price,
(
SELECT ps.date
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS date
FROM product p LEFT JOIN product_special ps ON (p.id = ps.id)
Como você pode ver, estou repetindo a mesma subconsulta apenas para obter outra coluna. Gostaria de saber se existe uma maneira melhor de fazer isso?
id é a chave primária nas duas tabelas. Não tenho problema em tornar o product_special.priority exclusivo, se isso puder ajudar.
cross apply
está disponível no Postgres começando com 9.3 (lançado em 2013), mas eles optaram por aderir ao padrão SQL e usar olateral
operador padrão . Em sua segunda consulta substituirleft join
comleft join lateral