SQL 编号列 - MySQL

Posted

技术标签:

【中文标题】SQL 编号列 - MySQL【英文标题】:SQL a numbering column - MySQL 【发布时间】:2008-12-22 02:53:46 【问题描述】:

这是一个sql新手问题。

基本上,我想要一个额外的列与我的选择语句一起返回以对行进行编号。 我正在使用 mysql

例如:

select * from friends

David
Steve
Joe

获取的语法是什么:

1  David
2  Steve
3  Joe

【问题讨论】:

很多时候你会有一个“id”字段(你的主键)来为数据库中的每条记录提供一个唯一的标识符。这是你想要的,还是你想要结果集中的结果集的行号(这是多余的)? @JasonK,如果给定的答案之一解决了您的问题,您应该单击它旁边的复选标记以“接受”答案。我认为当你这样做时你会得到一些代表和徽章。 【参考方案1】:

发件人:http://markmal.blogspot.com/2006/04/oracle-like-rownum-in-mysql.html

SELECT @rownum:=@rownum+1 rownum, t.*FROM (SELECT @rownum:=0) r, mytable t;

【讨论】:

【参考方案2】:

在 SQL Server 2005 及更高版本中,您可以使用Row_Number 函数。

【讨论】:

不知道为什么这会被否决;它可能是最接近标准 SQL 答案的东西(尽管并非每个 DBMS 都实现了它)。 因为它与标准 SQL 无关。他清楚地表明他正在使用 MySQL。不过,我不是投反对票的人。 其他人声明了适用于 Oracle 或 MS SQL Server 的解决方案,但没有被否决。这个答案并不比他们差。 只是为了记录,问题最初并未说明 MySQL。当我回答这个问题时,并没有提到正在使用哪个 RDBMS。您可以查看编辑历史以亲自查看。 实际上,没有 - 在发布答案时,它并没有说 MySQL。那是添加了一个额外的标签,并且更改了标题。【参考方案3】:

如果您正在开发一些应用程序,最好从您的结果集或数据集或您用来保存结果的任何容器中获取记录数。基本思想是在您的代码中执行此操作。否则,保罗解决方案将适用于您的情况。

在 MySql 中,没有像我们在 Oracle 中拥有的 ROWNUM 那样的东西,也没有我们在 MS SQL Server 中拥有的 Row_Number(),也没有任何其他变体。

编辑:

通过在您的代码中执行此操作,如果底层数据库发生更改,您无需更改 SQL 语句,正是因为这个原因。

【讨论】:

【参考方案4】:

我将在存储过程中执行此操作

CREATE TABLE #Foo (
        [FooId] [int] IDENTITY(1,1) NOT NULL,
        [Name] varchar(255)
)

SELECT *
FROM Friends
INTO #Foo

SELECT *
FROM #Foo

【讨论】:

【参考方案5】:

您可能已经从收到的不同回复中猜到了,答案取决于您使用的 DBMS。但是,答案通常涉及 ROWNUM 或该拼写的变体。

标准的 SQL 答案可能是 ROW_NUMBER() - @YonahW 提到的;它作为一个窗口函数工作,并非在所有 DBMS 中都可用。

【讨论】:

直到 SQL Server 2005, IIRC 才可用。

以上是关于SQL 编号列 - MySQL的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL——自动编号,增加列,删除列,插入数据,删除数据,修改数据

用于更改跟踪问题的 SQL RowVersion 编号列

SQL Server标识列重新编号[重复]

SQL数据库列自动生成编号?

mysql怎么设置自动编号呢?

导入 Microsoft Access 数据库时保留自动编号列的值