查询:
SELECT * FROM station
输出:
id | stationname | total
-------------------------
1 | Khar | 5
2 | SantaCruz | 3
3 | Sion | 2
4 | VT | 1
5 | newFort | 3
6 | Bandra | 2
7 | Worli | 1
8 | Sanpada | 3
9 | Joe | 2
10 | Sally | 1
11 | Elphiston | 2
12 | Currey Road | 1
是否可以显示所有记录,但条件是在第1位及以下显示特定记录,然后显示所有记录
E.g。我的where
条件是
where id=10
期望的输出:
id | stationname | total
-------------------------
10 | Sally | 1
1 | Khar | 5
2 | SantaCruz | 3
3 | Sion | 2
4 | VT | 1
5 | newFort | 3
6 | Bandra | 2
7 | Worli | 1
8 | Sanpada | 3
9 | Joe | 2
11 | Elphiston | 2
12 | Currey Road | 1
任何想法,提示都将受到赞赏
答案 0 :(得分:3)
您可以使用UNION ALL
结合两个不同的查询,如下所示:
SELECT * FROM Station WHERE ID=10
UNION ALL
SELECT * FROM Station WHERE ID<>10
更新(与returned order is undefined相关)
如果您看到两个查询的执行计划(使用UNION
和UNION ALL
),则使用UNION
的查询将对使用UNION ALL
的查询的结果进行排序strong>不对结果进行排序。查看两个查询的执行计划in this SQLFiddle。
使用UNION
查询执行计划:
使用UNION ALL
查询执行计划:
我是从SQL SERVER – Introduction and Example of UNION and UNION ALL
找到的答案 1 :(得分:3)
使用UNION ALL
可以在OP提供的案例中起作用,但是在使用时会出现一些可能导致意外结果的陷阱。
搜索的排序顺序可以缓解这些问题,前提是可以选择id
来保证列表中的第一个(本例中为0)
SELECT *
FROM Station
ORDER BY
CASE WHEN id = 10 THEN 0 ELSE id END
See this SQLFiddle (cudo's to hims056 for up up)