理想情况下,我需要一个与以下查询等效的查询:
select * from customer where row_number() = 3
但那是非法的。
我不能使用自增字段。
row_number() 是需要被选择的行。
我该怎么做呢?
编辑:好吧,我使用 iSql*plus 来练习,由于某些原因,限制和自增是非法的。最后,我创建了一个序列和一个触发器,并在每次有条目时将 ID 增加 1。
理想情况下,我需要一个与以下查询等效的查询:
select * from customer where row_number() = 3
但那是非法的。
我不能使用自增字段。
row_number() 是需要被选择的行。
我该怎么做呢?
编辑:好吧,我使用 iSql*plus 来练习,由于某些原因,限制和自增是非法的。最后,我创建了一个序列和一个触发器,并在每次有条目时将 ID 增加 1。
你可以使用LIMIT 2,1
代替WHERE row_number() = 3
。
正如文档所解释的那样,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大行数。
请记住这是从零开始编号。因此,如果您想要第n行,第一个参数应该是n-1。第二个参数将始终为1,因为您只需要一行。例如,如果要获取表格customer
中的第56行:
SELECT * FROM customer LIMIT 55,1
row_number() = 3 LIMIT 3,1
如何返回有效结果? - StarxWHERE row_number() = 3
... - sp00m您不能以这种方式选择一行。您必须指定一个字段,其值将为3
如果您要比较的字段是id
,以下查询将起作用。
select * from customer where `id` = 3
SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;
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 行数 OFFSET 偏移量
:
select * from customer order by id
limit 1 offset 2
你可以在表中添加一个自动生成的ID字段,并通过此ID进行选择。
SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;
您的表需要创建一个唯一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
row_number()
是什么意思?MySQL中的记录没有排序。您需要根据它们的内容以其他方式识别所需的数据。 - eggyalrow_number()
函数(尽管 Marlon 的用法是不正确的),但 MySQL 不支持它(就像许多其他现代 SQL 功能一样)。 - user330315