我的印象是在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。
答案 0 :(得分: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子句比double Select语句更快,特别是如果你正在使用许多记录。
答案 1 :(得分:1)
您可以使用嵌套查询:
SELECT node_id FROM
(
SELECT node_id FROM users LIMIT 100
) u
ORDER BY node_id