理想情况下,我需要一个等效于的查询
select * from customer where row_number() = 3
但这是非法的。
我不能使用自动递增的字段。
row_number() 是需要选择的行。
我该怎么做?
编辑:嗯,我使用 iSql*plus 来练习,由于某种原因,使用 limit 和 auto_increment 是非法的。我最终创建了一个序列和一个触发器,并且每次有一个条目时都将 id 增加 1。
理想情况下,我需要一个等效于的查询
select * from customer where row_number() = 3
但这是非法的。
我不能使用自动递增的字段。
row_number() 是需要选择的行。
我该怎么做?
编辑:嗯,我使用 iSql*plus 来练习,由于某种原因,使用 limit 和 auto_increment 是非法的。我最终创建了一个序列和一个触发器,并且每次有一个条目时都将 id 增加 1。
您可以使用LIMIT 2,1
而不是WHERE row_number() = 3
.
正如文档所解释的,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。
请记住,它是一个基于 0 的索引。所以,如果你想要行号n,第一个参数应该是n-1。第二个参数将始终为1,因为您只想要一行。例如,如果您想要表格的第56customer
行:
SELECT * FROM customer LIMIT 55,1
你不能像那样选择一行。您必须指定一个值为3的字段
这是一个有效的查询,如果您要比较的字段是id
select * from customer where `id` = 3
SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;
您可以像这样从 SQL 获取数据集并将其填充到 java 数据结构(如 List)中,然后在那里进行必要的排序。(也许在类似界面的帮助下)
默认情况下,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
您的表需要使用唯一的 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
您可以在表中添加自动生成的 id 字段并通过此 id 选择
SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;