【问题标题】:SQL. Get Ids by my orderSQL。按我的订单获取 ID
【发布时间】:2015-06-11 18:50:03
【问题描述】:

我的 sql 查询按以下顺序给我 id:

3,5,7,1,9,2

我可以使用什么来按顺序获取我的 ID:1,3,2? (3,1,2)。如果我使用

WHERE ID IN(1,3,2)

它给了我以下信息:(1,2,3)

【问题讨论】:

    标签: sql oracle oracle10g sql-order-by


    【解决方案1】:

    我可以使用什么来按顺序获取我的 Ids:1,3,2? (3,1,2)。

    您可以在 ORDER BY 子句中使用 CASE 表达式来自定义输出的排序。

    例如,

    SQL> WITH DATA AS(
      2  SELECT 3 ID FROM dual UNION ALL
      3  SELECT 5 ID FROM dual UNION ALL
      4  SELECT 7 ID FROM dual UNION ALL
      5  SELECT 1 ID FROM dual UNION ALL
      6  SELECT 9 ID FROM dual UNION ALL
      7  SELECT 2 ID FROM dual
      8  )
      9   SELECT id
     10  FROM   data
     11  WHERE  id IN( 1, 3, 2 )
     12  ORDER  BY CASE ID
     13              WHEN 3 THEN 1
     14              WHEN 1 THEN 2
     15              WHEN 2 THEN 3
     16            END
     17  /
    
            ID
    ----------
             3
             1
             2
    
    SQL>
    

    【讨论】:

    • 应该只允许 DBA 编写查询的一个很好的理由 :-) 我知道它提供了 OP 想要的东西,但我怀疑更好的答案是“不要这样做”或“排序” 事件之后你希望如何”。如果您需要扩展,这既是一个维护难题,也是一个性能杀手。尽管如此,由于已经说明的原因,我没有投反对票。
    • 好吧,我在某种程度上同意你的看法。但是,并不总是需要有人提出这样的问题才能在生产服务器上实施建议。基本上,这些问题是家庭作业或只是学习目的。可以用问题的质量来理解。关于不要这样做的建议,我本来可以这么说的,但是想象一下我必须为这样一个微不足道的问题提供多少解释。
    猜你喜欢
    • 2017-07-08
    • 1970-01-01
    • 2023-01-21
    • 2017-08-26
    • 2017-07-20
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多