代码之家  ›  专栏  ›  技术社区  ›  Timo Huovinen

SQL:如何从表中选择第1行、第3行、第11行和第n行?

  •  1
  • Timo Huovinen  · 技术社区  · 14 年前

    如何从表格中选择第1行、第3行、第11行和第n行?

    4 回复  |  直到 14 年前
        1
  •  1
  •   OMG Ponies    14 年前

    如果为表定义的主键是基于整数的数据类型(例如MySQL和SQLite都有自动增量),那么可以使用:

    SELECT t.*
      FROM TABLE t
     WHERE t.id IN (1,3, 11)
    

    …在哪里 id 是自动增量列。

    细节很少,但MySQL和SQLite没有分析查询支持,使得查询相当复杂:

    SELECT y.*
      FROM (SELECT t.*,
                            (SELECT COUNT(*)
                                FROM TABLE x
                               WHERE x.col <= t.col) AS rank
                   FROM TABLE t) y
     WHERE y.rank IN (1, 3, 11)
    
        2
  •  2
  •   Martijn    14 年前

    首先,永远不要依赖数据库中行的顺序。行没有自然的顺序。但是,可以添加一个属性(例如,带有自动递增的无符号int),该属性指示行的顺序。确保每当编辑表时,字段都会相应地更新。

    现在可以选择第一行、第三行和第十一行

    SELECT * FROM table t
    WHERE t.order IN (1, 3, 11)
    ORDER BY t.order ASC;
    
        3
  •  2
  •   Martin Smith    14 年前

    SET @rows_count = NULL;
    
    select col_list,rn from 
    (
        select col_list, @rows_count := IFNULL(@rows_count, 0) + 1 as rn
        from table_name
        order by col_list
        limit 11) top_n
    WHERE rn IN (1,3,11)
    
        4
  •  0
  •   Mukesh Kalgude    5 年前

    这样试试

    Select * 
    From ( Select Row_Number() OVER (Order by empno) rno, 
           e.* From scott.emp e )
    Where rno in (1, 3, 11)