从mysql表中选择特定行

时间:2012-05-04 23:41:49

标签: mysql select row-number

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

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

但这是非法的。

我无法使用自动增加的字段。

row_number()是需要选择的行。

我该怎么做?

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

6 个答案:

答案 0 :(得分:59)

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

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

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

SELECT * FROM customer LIMIT 55,1

答案 1 :(得分:5)

您不能选择这样的行。您必须指定值为3

的字段

如果您要比较的字段为id

,则此查询将起作用
select * from customer where `id` = 3

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

进行选择
SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;

答案 4 :(得分: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

答案 5 :(得分: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