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 puede ver, estoy repitiendo la misma subconsulta solo para obtener otra columna. Me pregunto si hay una mejor manera de hacer esto.
id es la clave principal en ambas tablas. No tengo ningún problema para que product_special.priority sea único si eso puede ayudar.
cross apply
está disponible en Postgres a partir de 9.3 (lanzado en 2013) pero eligieron adherirse al estándar SQL y usar ellateral
operador estándar . En su segunda consulta, reemplaceleft join
conleft join lateral