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
입니다 9.3로 시작하는 포스트 그레스에서 사용할 수 (2013 년 발표)하지만 그들은 SQL 표준을 준수 표준 사용하기로 결정했습니다lateral
연산자를. 두 번째 쿼리left join
에서left join lateral