2012-05-30 6 views
1

매우 부피가 크고 최적화로 수행 할 수있는 쿼리가 있습니다. 첫 번째 것은 분명히 하위 쿼리가 아닌 조인으로 대체 될 것이지만 하위 서브 쿼리에 영향을 미칩니다. 나는 그것에 제안/해결 방법을 주시면 감사하겠습니다. MySql 쿼리 최적화, 부속 쿼리가 아닌 조인으로 바꾸기

SELECT * 
FROM lastweeksales 
WHERE productID = 1234 
AND retailer NOT 
IN (
    SELECT retailer 
    FROM sales 
    WHERE productID 
    IN (
     SELECT productID 
     FROM products 
     WHERE publisher = 123 
    ) 
    AND DATE = date(now()) 
) 

는 기본적으로, 나는 소매 오늘 판매했지만 판매는 특정 게시자 제품에 있어야하는 존재하지 않는 제품에의 지난주, 지난 판매에서 행을 얻으려면 쿼리를합니다.

: S : S : S

+0

는 lastweeksales의 모든 행이 저조한 실적을 가지고있는 서브 테이블을 투사하기 때문에'사용'IN'을 IN' 또는 NOT하지 않으려 고. 조인을 사용하여 원하는 데이터를 얻으십시오. – Neo

+0

@ 네오 정확히 그가 요구하는 것이 아닙니까? –

답변

1

당신은 함께 그룹이 개 내부 하위 쿼리 쉽게 INNER JOIN를 통해를 할 수 있습니다. 바깥 일을 위해 당신은 LEFT OUTER 가입 사용해야 다음과 같이 retailer IS NULL 필터링 :

SELECT lws.* 
    FROM lastweeksales lws 
    LEFT JOIN (SELECT s.retailer 
       FROM sales s 
       JOIN products p USING (productID) 
       WHERE p.publisher = 123 
       AND s.date = date(now())) AS r 
     ON lws.retailer = r.retailer 
WHERE r.retailer IS NULL;