【问题标题】:Select specific row from mysql table从mysql表中选择特定行
【发布时间】:2012-05-14 12:10:44
【问题描述】:

理想情况下,我需要一个等效于

的查询
select * from customer where row_number() = 3

但这是非法的。

我不能使用自动递增的字段。

row_number() 是需要选择的行。

我该怎么做?

编辑:嗯,我使用 iSql*plus 来练习,使用 limit 和 auto_increment 出于某种原因是非法的。我最终创建了一个序列和一个触发器,并且每次有条目时都将 id 增加 1。

【问题讨论】:

  • row_number() 是什么意思? MySQL 中的记录没有排序。您需要根据其内容以其他方式识别所需数据。
  • @eggyal:标准 ANSI SQL 确实有一个 row_number() 函数(虽然 Marlon 的用法不正确)但 MySQL 不支持它(与许多其他现代 SQL 特性一样)

标签: mysql select row-number


【解决方案1】:

默认情况下,SQL 表是没有排序的,并且从一组无序的行中请求第 n 行没有任何意义,因为它每次都可能返回不同的行,除非您指定 ORDER BY:

select * from customer order by id where row_number() = 3

(有时 MySQL 表以内部顺序显示,但您不能依赖这种行为)。然后你可以使用LIMIT offset, row_count,偏移量从 0 开始,所以第 3 行变成了偏移量 2:

select * from customer order by id
limit 2, 1

或者你可以使用LIMIT row_count OFFSET offset:

select * from customer order by id
limit 1 offset 2

【讨论】:

    【解决方案2】:

    您可以使用LIMIT 2,1 代替WHERE row_number() = 3

    正如documentation 解释的那样,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数

    请记住,它是一个从 0 开始的索引。所以,如果你想要行号n,第一个参数应该是n-1。第二个参数总是1,因为你只想要一行。例如,如果你想要一个表customer的行号56

    SELECT * FROM customer LIMIT 55,1
    

    【讨论】:

    • LIMIT 与这个问题有什么关系?
    • @Starx 如果@MarlonBrando 只想要他的结果的第三行,而不是任何技术 ID,LIMIT 就是解决方案。
    • @nawfal,row_number() = 3 LIMIT 3,1 如何返回有效结果?
    • @Starx 是的,当然,您必须删除查询的WHERE row_number() = 3...
    • 这对我很有用。我有一个测验数据库,我想在单独的页面上显示表格的每一行以及问题和答案。下一个按钮跟踪页码。我的 PHP/MySql 限制语句是:LIMIT $pageNumber, 1
    【解决方案3】:
    SET @customerID=0;
    SELECT @customerID:=@customerID+1 AS customerID
    FROM CUSTOMER ;
    

    您可以像这样从 SQL 获取数据集并将其填充到 java 数据结构(如 List)中,然后在那里进行必要的排序。 (也许借助类似的界面)

    【讨论】:

      【解决方案4】:

      您的表需要使用唯一的 ID 字段创建,理想情况下该字段应具有 AUTO_INCREMENT 属性。示例:

      CREATE TABLE Persons
      (
      P_Id int NOT NULL AUTO_INCREMENT,
      LastName varchar(255) NOT NULL,
      FirstName varchar(255),
      PRIMARY KEY (P_Id)
      )
      

      然后您可以通过以下方式访问此表中的第三条记录:

      SELECT * FROM Persons WHERE P_Id = 3
      

      【讨论】:

        【解决方案5】:

        您不能像这样选择一行。您必须指定一个字段,其值将为 3

        如果您要比较的字段是id,则这是一个有效的查询

        select * from customer where `id` = 3
        

        【讨论】:

        • 最简单详细的答案。 +1
        【解决方案6】:

        您可以在表格中添加一个自动生成的 id 字段并通过此 id 选择

        SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;
        

        【讨论】:

          猜你喜欢
          • 2022-10-14
          • 2019-03-22
          • 1970-01-01
          • 1970-01-01
          • 2014-11-28
          • 1970-01-01
          • 2018-08-27
          • 2020-05-30
          • 1970-01-01
          相关资源
          最近更新 更多