【发布时间】:2014-05-07 12:31:03
【问题描述】:
我在这里有一个小问题,我会试着解释一下。我想获取表中每个唯一 id 的最新(最高 id)最多 10 行(可以多于/少于 10 行)。
因此,如果我有兴趣了解 id "1" 和 "2" 中的最新 10 行,我会将 LIMIT 设置为 20 (2 * 10)。
这就是我当前的查询现在的样子(它会错误地获取第一个 id 的最新 20 行,因为该 id 存在超过 10 行)。
SELECT positions.id
, trackedpersons.name
, trackedpersons.id
, events.name
, events.route
, positions.latitude
, positions.longitude
, positions.datetime
FROM trackedpersons
, positions
, events
WHERE trackedpersons.id IN (1,2)
AND events.id = 1
AND events.id = positions.eventid
AND positions.trackedpersonid = trackedpersons.id
ORDER
BY trackedpersons.id
, positions.id DESC
LIMIT 20;
【问题讨论】:
-
不要使用隐式(逗号)连接语法。相反,始终使用显式 JOIN 语法。除此之外,这是一个 Top-N 问题(每天都会被问到和回答的那种)
-
@Strawberry 我主要使用隐式连接,有什么区别?
-
我也想知道:)
-
MySQL 以不同的顺序评估连接,具体取决于它们是隐式的还是显式的。如果它们都是隐式的,这无关紧要(与 2*3*6 = 6*2*3 相同),但是当与 OUTER JOIN(不能隐式表达)结合使用时,您将开始得到错误或意外结果。另外,它更难阅读。
-
@flaschenpost 这是评论,不是答案。