2014-10-02 92 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