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)
Come puoi vedere sto ripetendo la stessa subquery solo per far uscire un'altra colonna. Mi chiedo c'è un modo migliore per farlo?
id è la chiave primaria in entrambe le tabelle. Non ho problemi a rendere unico product_special.priority se questo può aiutare.
cross apply
è disponibile in Postgres a partire da 9.3 (rilasciato nel 2013) ma hanno scelto di aderire allo standard SQL e utilizzare l'lateral
operatore standard . Nella tua seconda query sostituiscileft join
conleft join lateral