2013-10-07 3 views
0

my previous question에 대한 의견은 "답변도 여기에 있습니다 : stackoverflow.com/questions/1313120/…. MySQL에서 상관 관계가있는 서브 쿼리가 맘에 들지 않으므로 받아 들인 답은 기술적으로 정확하다고 생각합니다. 실제로는 매우 비효율적이라고 할 수 있습니다."이 쿼리를보다 효율적으로 만드는 방법은 무엇입니까?

내가 수락 한 답변의 SQl은 at SQL fiddle입니다. 언급 된 질문은 LEFT JOIN과 INNER JOIN을 비교합니다. SQL Fddle은 JOIN <만을 사용하며, INNER JOIN을 기본값으로 사용합니다.

그래서 어떻게 LFT JOIN을 사용하도록 쿼리를 다시 작성할 수 있습니까?

+0

추가 "LEFT"(왼쪽, 우연히)에 가입 앞) –

답변

2

mysql 성능이 확실하지 않지만 위치를 실격시킬 행에 대해 LEFT JOIN을 수행 한 다음 WHERE를 사용하여 LEFT JOIN이 일치하지 않는 레코드 만 선택하십시오.

SELECT v.id 
    , v.description 
    , v.type 
    , p.time_stamp 
    , p.latitude 
    , p.longitude 
    FROM positions p 
    JOIN vehicles v ON v.id = p.id 
    LEFT JOIN positions l ON l.id = p.id 
         AND l.time_stamp > p.time_stamp 
    WHERE l.id IS NULL 

또는 SQLFiddle에서 : http://sqlfiddle.com/#!2/2e994/31/0

관련 문제