【问题标题】:Specified record in top of results list结果列表顶部的指定记录
【发布时间】:2012-03-06 10:15:10
【问题描述】:

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

我的丑陋变种:

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

除了ansimysql 的查询变体对我来说也很有趣

【问题讨论】:

    标签: sql ansi-sql


    【解决方案1】:

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

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

    注意:对于没有 ORDER BY 子句的表或 SELECT,没有保证或隐含的顺序

    【讨论】:

    • 当我开始写我的答案时,我很确定你正在编辑你的答案并添加第二部分;无论如何,您是第一个(赞成),所以您希望我删除我的答案吗?谢谢
    • 关于第一个查询:为什么这么奇怪的排序规则0, -n, ..., +m
    • @Marco:如果你想删除,但没有重叠
    • @gbn ansi 怎么样(我对两种最佳变体都很感兴趣)?
    【解决方案2】:

    假设 id 总是正数,试试:

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

    【讨论】:

    • 坦克。虽然在我的示例中我选择了 PK,但最常见的查询对我来说更可取
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多