2

我的印象是,在 SQL 查询中使用 ORDER BY 不会影响为结果集选择了哪些记录。我认为 ORDER BY 只会影响结果集的呈现。

然而,最近,在我使用 ORDER BY 子句之前,我从查询中得到了意想不到的结果。这表明 a) ORDER BY 可以影响结果集中包含哪些记录,或者 b) 我还有一些其他需要处理的错误。

它是哪一个?

这是查询:SELECT node_id FROM users ORDER BY node_id LIMIT 100

(node_id 既是主键也是外键)。

如您所见,该查询包含一个 LIMIT 子句。似乎如果我使用 ORDER BY,则在选择前 100 名之前对记录进行排序。我原以为它会根据自然顺序选择 100 条记录,然后根据 node_id 对其进行排序。

我已经查找了有关 ORDER BY 的信息,但到目前为止,我能找到的唯一信息表明它只影响演示文稿......我正在使用 MySQL。

4

2 回答 2

2

ORDER BY 反映了 LIMIT 条款之前所有记录的顺序。为了得到你想要的结果,你需要这个:

select u.node_id
from users u
join
(
    SELECT node_id
    FROM users 
    LIMIT 100
) us ON u.node_id = us.node_id
ORDER BY u.node_id

这样,您将首先使用 limit 子句并获取前 100 条记录,然后对结果进行排序。join 子句比双 Select 语句快,尤其是在处理许多记录时。

于 2013-01-31T23:04:05.127 回答
1

您可以使用嵌套查询:

SELECT node_id  FROM 
(
SELECT node_id FROM users LIMIT 100
) u 
ORDER BY node_id 
于 2013-01-31T23:01:40.243 回答