从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表中选择特定行的主要内容,如果未能解决你的问题,请参考以下文章
如何从 SQL 表中选择特定行并连接 SQL 服务器中的多个表?
如何从SQL表中选择特定行并在SQL Server中连接多个表?