Sql 结果列表顶部的指定记录

Sql 结果列表顶部的指定记录,sql,ansi-sql,Sql,Ansi Sql,任务:在结果列表顶部选择指定记录 我丑陋的变种: (select * from mytable where id = 42) union all (select * from mytable where id != 42 order by id) 除了ansimysql的查询变量之外,我也非常感兴趣isansi和供应商SQL解决方案之间没有区别 select * from mytable order by CASE WHEN id = 42 THEN 0 ELSE 1 END, id

任务:在结果列表顶部选择指定记录

我丑陋的变种:

(select * from mytable where id = 42)
union all
(select * from mytable where id != 42 order by id)

除了
ansi
mysql的查询变量之外,我也非常感兴趣
is

ansi和供应商SQL解决方案之间没有区别

select *
from mytable 
order by
    CASE WHEN id = 42 THEN 0 ELSE 1 END, id

注:表或SELECT没有order BY子句时没有保证或隐含的订单ANSI和供应商SQL解决方案之间没有区别

select *
from mytable 
order by
    CASE WHEN id = 42 THEN 0 ELSE 1 END, id

注意:表或没有order BY子句的SELECT没有保证或隐含的订单假设id始终为正,请尝试:

select *
from mytable 
order by CASE WHEN id = 42 THEN 0 ELSE id END

假设id始终为正值,请尝试:

select *
from mytable 
order by CASE WHEN id = 42 THEN 0 ELSE id END

当我开始写我的答案时,我很确定你在编辑你的答案,并添加了第二部分;不管怎么说,你是第一个(得票最多),所以你希望我删除我的答案吗?感谢第一个查询:为什么排序规则如此奇怪
0、-n、+m
?@Marco:delete if you want,但是没有overlap@gbnansi怎么样(我对这两个最佳变体都很感兴趣)?当我开始写我的答案时,我很确定你在编辑你的答案并添加第二部分;不管怎么说,你是第一个(得票最多),所以你希望我删除我的答案吗?感谢第一个查询:为什么排序规则如此奇怪
0、-n、+m
?@Marco:delete if you want,但是没有overlap@gbnansi怎么样(我对这两种最佳变体都感兴趣)?坦克。虽然在我的示例中,我选择了PK,但最常见的查询比meTanks更可取。虽然在我的示例中,我选择了PK,但最常见的查询对我来说更可取