【问题标题】:SQL: How to select 1st, 3rd, 11th and nth row from a table?SQL:如何从表中选择第 1 行、第 3 行、第 11 行和第 n 行?
【发布时间】:2011-03-30 09:26:33
【问题描述】:

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

【问题讨论】:

  • 一些额外的信息会有所帮助。该表是否具有正确播种的主键?如果是这样,这就是您需要使用的全部内容。
  • 你需要它同时在 sqllite 和 mysql 中工作吗?如果不是哪一个?
  • 请记住,这不是讨论最佳实践,选择这种类型的原因不是为了列表。

标签: sql mysql sqlite select


【解决方案1】:

试试这个方法

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

【讨论】:

    【解决方案2】:

    如果为基于整数的数据类型的表定义了一个主键——例如 MySQL 和 SQLite 都有 auto_increment——那么你可以使用:

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

    ...id 是 auto_increment 列。

    细节很少,但 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)
    

    【讨论】:

    • 尚未在实际服务器上进行检查,但我明白它背后的想法,并且在 mysql 或 sqlite 中没有选择单独的行支持。这个答案有两个答案+替代选项。
    【解决方案3】:

    对于 MySQL

    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】:

      首先,您永远不应该依赖数据库中行的顺序。行没有自然顺序。但是,您可以添加一个属性(例如,具有自动增量的 unsigned int)来指示行的顺序。确保无论何时编辑表格,该字段都会相应更新。

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

      SELECT * FROM table t
      WHERE t.order IN (1, 3, 11)
      ORDER BY t.order ASC;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-29
        • 2018-06-15
        相关资源
        最近更新 更多