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)
Gördüğünüz gibi sadece başka bir sütun çıkarmak için aynı alt sorguyu tekrarlıyorum. Merak ediyorum, bunu yapmanın daha iyi bir yolu var mı?
id , her iki tabloda da birincil anahtardır. Bu yardımcı olabilir eğer product_special.priority benzersiz yapma konusunda hiçbir sorunum yok .
cross apply
ise 9.3 ile başlayan Postgres olanağı (2013 yılında yayımlanan) ancak SQL standardına uyması ve standart kullanmayı tercihlateral
operatörü. İkinci sorgunuzdaleft join
left join lateral