2

特定の行 (id=x) を取得してからリマインダーを取得するにはどうすればよいですか? 何かのようなもの:

SELECT * FROM table ORDER BY id=5 FIRST THAN id DESC

次のようにUNION ALLを使用しようとしました:

(SELECT * FROM table WHERE id=5) 
 UNION ALL 
(SELECT * FROM table WHERE id!=5 ORDER BY id DESC)

しかし、2 番目の SELECT が ID (desc) で順序付けられたレジスタを返さないため、結果は予想外です。さらに、この方法では、さらに多くのことを書く必要があります。

4

3 に答える 3

5
SELECT * FROM table ORDER BY id = 5 DESC, id ASC

これにより、次のような結果が得られます: 5, 1, 2, 3, 4, 6, 7, ...

于 2013-02-04T14:56:03.117 に答える
2

order by行に複数の句を入れることができます。

select *
from t
order by (case when id = 5 then 1 else 0 end) desc, id desc

また、SQL のテーブルと結果セットは順不同です。1 つの例外はorder by、結果セットに対する の使用です。union allメソッドが機能するとは思わないでしょう。

于 2013-02-04T14:55:20.420 に答える
0

これにより、最初に '5' が表示され、次に 'not 5'' が表示されます

SELECT * 
FROM table 
ORDER BY case when id=5 then 0 else 1 end ASC
于 2013-02-04T14:53:35.403 に答える