从mysql表中选择特定行

问题描述 投票:24回答:6

理想情况下,我需要一个相当于的查询

select * from customer where row_number() = 3

但这是非法的。

我无法使用自动增量字段。

row_number()是需要选择的行。

我该怎么做?

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

mysql select row-number
6个回答
59
投票

您可以使用LIMIT 2,1而不是WHERE row_number() = 3

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

请记住,它是一个基于0的索引。因此,如果您想要行号n,则第一个参数应为n-1。第二个参数将始终为1,因为您只需要一行。例如,如果您想要表格customer的第56行:

SELECT * FROM customer LIMIT 55,1

5
投票

你不能选择那样的行。您必须指定一个值为3的字段

如果您要比较的字段是id,这是一个可行的查询

select * from customer where `id` = 3

3
投票
SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;

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


2
投票

您可以在表格中添加自动生成的id字段,然后按此ID进行选择

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;

2
投票

默认情况下不对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

1
投票

您的表需要使用唯一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)
)

然后,您可以访问此表中的第3条记录:

SELECT * FROM Persons WHERE P_Id = 3
© www.soinside.com 2019 - 2024. All rights reserved.