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)
如您所见,我在重复相同的子查询只是为了获得另一列。我想知道是否有更好的方法?
id是两个表中的主键。如果有帮助,我可以毫无问题地使product_special.priority唯一。
cross apply
是在Postgres的开始可用9.3(2013年发布),但他们选择了坚持SQL标准和使用标准的lateral
运营商。在您的第二个查询中,替换left join
为left join lateral