对我之前的问题的评论说:“我建议也在这里查看答案:stackoverflow.com/questions/1313120/...</a>。您接受的答案在技术上认为是正确的,但在实践中可能会变得非常低效,因为MySQL 不喜欢相关子查询”。
我接受的答案的 SQl在 SQL fiddle。引用的问题比较了 LEFT JOIN 和 INNER JOIN。SQL Fddle 仅使用 JOIN<,据我所知默认为 INNER JOIN。
那么,如何重写查询以使用 LFT JOIN?
对我之前的问题的评论说:“我建议也在这里查看答案:stackoverflow.com/questions/1313120/...</a>。您接受的答案在技术上认为是正确的,但在实践中可能会变得非常低效,因为MySQL 不喜欢相关子查询”。
我接受的答案的 SQl在 SQL fiddle。引用的问题比较了 LEFT JOIN 和 INNER JOIN。SQL Fddle 仅使用 JOIN<,据我所知默认为 INNER JOIN。
那么,如何重写查询以使用 LFT JOIN?
我不确定 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