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)
Seperti yang Anda lihat, saya mengulangi subquery yang sama hanya untuk mengeluarkan kolom lain. Saya bertanya-tanya apakah ada cara yang lebih baik untuk melakukan ini?
id adalah kunci utama di kedua tabel. Saya tidak punya masalah membuat product_special.priority unik jika itu dapat membantu.
cross apply
adalah tersedia di Postgres dimulai dengan 9,3 (dirilis pada 2013) tetapi mereka memilih untuk mematuhi standar SQL dan menggunakan standarlateral
operator. Dalam kueri kedua Anda gantileft join
denganleft join lateral