理解すべき2つのこと:
-
一般的に、結果セットは順不同 です。
ORDER BY
を指定しない限り 句; 非厳密な順序 を指定する範囲で (つまり、ORDER BY
一意でない列の場合)、その順序で等しいレコードが結果セット内に表示される順序は定義されていません。問題の根本である、このような非厳密な順序を指定している可能性があります。
ORDER BY
を指定して、順序が厳密であることを確認してください。 結果セット内の最終的な位置を気にする各レコードを一意に識別するのに十分な列のセットに対して。 -
DISTINCT
GROUP BY
を使用できます 、これにより、結果はグループ化された列によって順序付けられます。つまり、SELECT DISTINCT a, b, c FROM t
ORDER BY a, b, c
のように見える結果セットを生成します 適用された。繰り返しになりますが、ニーズを満たすために十分に厳密な順序を指定すると、この効果が無効になります。
更新後、上記の私のポイント2を念頭に置いて、結果をグループ化してDISTINCT
を達成する効果は明らかです。 グループ化されていない列p.id
で並べ替えることができなくなります;代わりに、次のようにします。
SELECT t.*
FROM Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC