【问题标题】:SQLite Order by WHERE IN clause [duplicate]SQLite 按 WHERE IN 子句排序 [重复]
【发布时间】:2018-07-19 19:56:45
【问题描述】:

我正在使用 SQLite,并且我提供了一个要检索的 id 值列表。但是,这些 id 值的顺序很重要,我想以相同的顺序检索记录。

例如,

SELECT 
  * 
FROM 
  todos
WHERE 
  todos.id in ( 1, 3, 2, 4 ) 

这会返回:

1
2
3
4

但我希望它以与提供的 id 值相同的顺序返回,如下所示:

1
3
2
4

我已经看到了 MySQL 和 PostgreSQL 的答案,但没有看到 SQLite 的答案。

【问题讨论】:

    标签: sqlite android-sqlite sql-order-by where-in activeandroid


    【解决方案1】:

    ORDER BY CASE id WHEN x THEN y

    ​​>

    obscure SQLite forum 中找到它。

    有一种简洁的排序方式,它非常具体,但适合以编程方式生成。

    要实现所需的顺序,您可以使用以下命令:

    SELECT 
      * 
    FROM 
      todos
    WHERE 
      todos.id in ( 1, 3, 2, 4 ) 
    ORDER BY 
      CASE todos.id  
      WHEN 1 THEN 1 
      WHEN 3 THEN 2 
      WHEN 2 THEN 3 
      WHEN 4 THEN 4
      END
    

    这会按以下顺序返回记录:

    1
    3
    2
    4
    

    如您所见,您正在手动指定每条记录的顺序。如果您手动执行此操作会很费力,但如果您使用编程语言,则可以轻松编程并附加到查询中。

    例如,我在 Android/Java 中使用它,最后做了这样的事情来生成这个ORDER BY 子句:

    String orderBy = "CASE todos.id ";
    
    int i = 1;
    for ( int id : ids ) {
        orderBy = orderBy.concat( " WHEN " + id + "' THEN " + i );
        i++;
    }
    
    orderBy = orderBy.concat( " END");
    
    // Append `orderBy` to your normal SQLite query.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-30
      • 2011-09-09
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多