如何使这个查询更有效?

时间:2013-10-07 03:17:40

标签: mysql

my previous question的评论说“我建议在这里查看答案:stackoverflow.com/questions/1313120/…。你接受的答案在技术上是正确的,在实践中可能会变得非常低效,因为MySQL没有像相关的子查询“。

我接受的答案的SQl是at SQL fiddle。引用的问题比较LEFT JOIN和INNER JOIN。 SQL Fddle仅使用JOIN<据我所知默认为INNER JOIN。

那么,如何重写查询以使用LFT JOIN?

1 个答案:

答案 0 :(得分: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