2013-10-07 52 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