从mysql表中选择特定行

Posted

技术标签:

【中文标题】从mysql表中选择特定行【英文标题】:Select specific row from mysql table 【发布时间】: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 特性一样) 【参考方案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;

【讨论】:

以上是关于从mysql表中选择特定行的主要内容,如果未能解决你的问题,请参考以下文章

从每个 id 具有特定值的表中选择行

如何从 SQL 表中选择特定行并连接 SQL 服务器中的多个表?

将数据从表插入临时表,然后从临时表中选择特定行

如何从SQL表中选择特定行并在SQL Server中连接多个表?

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中

从表中选择行,其中具有相同 id 的另一个表中的行在另一列中具有特定值