我想要顯示錶中的所有記錄。恩。從學生表。 第一行的特定學生信息。 ex。學生id = 3,然後顯示其他學生信息。顯示所有記錄從頂部的小行開始
So result look like
Id Name City
3 PQR xyz
1 LMN xyz
2 ABC xyz
4 WXY xyz
在此先感謝
我想要顯示錶中的所有記錄。恩。從學生表。 第一行的特定學生信息。 ex。學生id = 3,然後顯示其他學生信息。顯示所有記錄從頂部的小行開始
So result look like
Id Name City
3 PQR xyz
1 LMN xyz
2 ABC xyz
4 WXY xyz
在此先感謝
它通常是更好地激發兩個查詢要做到這一點,並把結果放在一起在你的應用程序。
但是有一些技巧可以工作。
這兩種技術我會考慮是:
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;
請注意,這樣比較容易閱讀,但可以肯定的是,在大型索引表中,性能較低,因爲優化器將無法使用索引進行排序。
select * from students
order by id <> 3,
id
或
select * from students
order by case when id = 3
then 1
else 2
end,
id
我喜歡:
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 */
請注意,使用此技術會強制優化器遠離使用索引進行排序,因爲索引的順序中沒有id = 3。 – 2014-10-02 10:36:10
我沒有意識到索引問題,我像WHERE子句一樣閱讀它。謝謝你的提示。 – Arth 2014-10-02 10:43:54
你的代碼在哪裏? – 2014-10-02 10:10:07