2

SQLクエリでORDERBYを使用しても、結果セットに選択されたレコードには影響しないという印象を受けました。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句はdoubleSelectステートメントよりも高速です。

于 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 に答える