2012-05-31 3 views
0

나는이 쿼리를 사용합니다 (세 개의 하위 쿼리 모두 동일한 행에서 다른 열을 선택한다는 점에 유의하십시오). 본질적으로 product_bid의 행을 product 행과 함께 최대 날짜로 가져 오려고합니다.하위 쿼리 결과 주위의 MySQL JOIN

SELECT 
p.product_id, 
p.product_title, 
(SELECT b.bid_id FROM product_bids b WHERE b.bid_product_id=p.product_id ORDER BY b.bid_date DESC LIMIT 1) AS bid_id, 
(SELECT b.bid_date FROM product_bids b WHERE b.bid_product_id=p.product_id ORDER BY b.bid_date DESC LIMIT 1) AS bid_date, 
(SELECT b.bid_amount FROM product_bids b WHERE b.bid_product_id=p.product_id ORDER BY b.bid_date DESC LIMIT 1) AS bid_amount 

FROM product p 

WHERE p.product_auction_id=325 

product_bids의 PK를 얻을, 그리고에 (서브 쿼리의 결과) 또는이 일의 깨끗한 방법에 합류 한 번 하위 쿼리를 할 수있는 방법이 있나요?

사이드 노트 : 쿼리 최적화 프로그램이이를 중요도가 낮 으면 인식합니까? 하나 개의 SQL 쿼리 내에서 그 일을

감사

답변

0

당신은 각 제품에 대한 최신 입찰 날짜를 선택하는 하위 쿼리와 함께 당신의 테이블을 조인 할 수 있습니다

SELECT p.product_id, b.bid_id, b.bid_date, b.bid_amount 
FROM product_bids AS b NATURAL JOIN (
     SELECT bid_product_id, MAX(bid_date) AS bid_date 
     FROM  product_bids 
     GROUP BY bid_product_id 
     ) AS t 
    JOIN product AS p ON p.product_id = b.bid_product_id 
WHERE p.product_auction_id = 325 
+0

이 내 원래의 쿼리는 product_bids''가 이에 행으로 제품을 반환하는 것을 제외하고 완벽합니다. 대신이 중 하나가 왼쪽 결합이 될 수 있습니까? – Adam

+0

@Adam : 예, 물론입니다. (주문 했으므로 실제로 제품에 바로 가입하고 싶습니다.). – eggyal

+0

게시 한대로 알아 냈습니다. 감사. 완전한. – Adam

0

는 힘들 수도 있지만, 나는이 제안이있다. 다음과 같이 두 번째 질문을 먼저 product_bids에서 최대 날짜를 선택

select p.product_id, p.product_title, b.bid_id, b.bid_date, b.bid_amount 
from product p 
inner join product_bids b on b.bid_date = @yourselectedbiddate 

이 정확히 같은 데이터를 가져,하지만 훨씬 더 높은 성능을해야한다. @yourselectedbiddate는 정확히 하나의 레코드에있는 값을 가져야합니다. 그렇지 않으면 원하지 않는 행을 곱합니다. 그렇지 않은 경우 (상단에 의존 할 수 없음을 의미), 최대 날짜가있는 레코드를 먼저 정의하지 않았으므로 제안서와 비슷한 문제가 발생합니다.