2014-10-02 88 views
0

我想要顯示錶中的所有記錄。恩。從學生表。 第一行的特定學生信息。 ex。學生id = 3,然後顯示其他學生信息。顯示所有記錄從頂部的小行開始

So result look like 
Id Name City 
3 PQR  xyz 
1 LMN  xyz 
2 ABC  xyz 
4 WXY  xyz 

在此先感謝

+0

你的代碼在哪裏? – 2014-10-02 10:10:07

回答

1

它通常是更好地激發兩個查詢要做到這一點,並把結果放在一起在你的應用程序。

但是有一些技巧可以工作。

這兩種技術我會考慮是:

1.使用聯盟

SELECT * FROM students WHERE id = 3 
UNION ALL 
SELECT * FROM students where id <> 3; 

甚至

SELECT * FROM students WHERE id = 3 
UNION ALL 
SELECT * FROM (SELECT * FROM students where id <> 3 order by id) x; 

2.複雜的ORDER BY語句

SELECT * FROM students order by id = 3 desc, d; 

請注意,這樣比較容易閱讀,但可以肯定的是,在大型索引表中,性能較低,因爲優化器將無法使用索引進行排序。

+1

我喜歡UNION方法,但這應該是UNION ALL。 – Arth 2014-10-02 10:42:38

+1

您還需要爲第二個查詢的子查詢提供別名。 – Arth 2014-10-02 10:52:33

+0

謝謝。已編輯=) – 2014-10-04 16:24:40

1
select * from students 
order by id <> 3, 
     id 

select * from students 
order by case when id = 3 
       then 1 
       else 2 
     end, 
     id 
0

我喜歡:

SELECT * 
    FROM student 
ORDER BY id = 3 DESC, /* id = 3 returns 1 (true) or 0 (false) */ 
     id /* This will put your other students in ASC order of id */ 
+1

請注意,使用此技術會強制優化器遠離使用索引進行排序,因爲索引的順序中沒有id = 3。 – 2014-10-02 10:36:10

+0

我沒有意識到索引問題,我像WHERE子句一樣閱讀它。謝謝你的提示。 – Arth 2014-10-02 10:43:54