使用新列更新 sql 表

Posted

技术标签:

【中文标题】使用新列更新 sql 表【英文标题】:Updating a sql table with new column 【发布时间】:2011-11-27 18:12:57 【问题描述】:

我正在使用 mysql,并且我有一个包含以下列的表:postid、userid、datestamp

我想创建一个名为“条目”的新列,根据日期戳按时间顺序对条目进行编号

所以,对于行:

3705    1   2003-12-08 13:42:13
3711    15  2003-11-12 15:22:01
3701    2   2004-01-11 01:22:12

我想结束:

3705    1   2003-12-08 13:42:13 2
3711    15  2003-11-12 15:22:01 1
3701    2   2004-01-11 01:22:12 3

我该如何执行这项任务?

【问题讨论】:

您正在寻找行排名。看到这个问题***.com/questions/1964811/row-rank-in-a-mysql-view 【参考方案1】:
ALTER TABLE tbl ADD COLUMN nr integer;

SET @rn := 0;

UPDATE tbl
SET    rn = (@rn := @rn + 1)
ORDER  BY datestamp, postid, userid;

这是working demo。

我从@OMG Ponies' Posting中获取了MySQL中缺少的窗口函数row_number()的替代品。 除了 datestamp 之外,还按 postiduserid 排序,因为不能保证时间戳列是唯一的。 阅读setting variables in the manual。

【讨论】:

【参考方案2】:
ALTER TABLE tbl ADD COLUMN entry INTEGER

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

要将其设置为有序数,您将使用 RANK 函数,但 MySQL 没有,因此必须寻找像这样的替代品: http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/

【讨论】:

【参考方案3】:

如果您只想按时间顺序排列日期,则不必创建另一列。你可以用一个简单的光标来做。

private static String[] FROM = _ID, COL_1, COL_NAME, COL_2, COL_3, COL_4; //add your columns
private static String ORDER_BY = COL_NAME + " DESC"; //or ASC for ascending
Cursor cursor = db.query(DATABASE_TABLE, FROM, null, null, null, null, ORDER_BY);

然后只显示光标的结果

【讨论】:

以上是关于使用新列更新 sql 表的主要内容,如果未能解决你的问题,请参考以下文章

带有连接的 Oracle SQL 更新列

使用流式 API 更新新列后无法向 BigQuery 表插入新值

在 VB 2010 的数据表中插入新列时,如何更新 SQL Server 2008 数据库?

使用 sql 文件的 phpMyAdmin 数据库更新

向表中添加了列,但链接图表未使用新列数据更新

更新表中所有行的有效方法