mysql - 为sql中的每个唯一值插入增量

标签 mysql increment group-by

我的任务是解决一个 SQL 问题,该问题超出了我所掌握的 sql 知识范围。我有以下问题。

我有一个当前看起来像这样的表:

 widgets
---------
    a
    a
    a
    b
    b
    c
    d
    d
    d

我想要另一个表,每个唯一值都递增编号......像这样:

widgets  | widget_id
--------- ----------
    a    |    1
    a    |    1
    a    |    1
    b    |    2
    b    |    2
    c    |    3
    d    |    4
    d    |    4
    d    |    4

我不确定如何使用插入语句完成此操作?

最佳答案

创建一个包含 IDENTITY 列的表:

像这样:

CREATE TABLE widget_ids (
  widget_id INT AUTO_INCREMENT PRIMARY KEY,
  widget varchar(5)
)

并运行这个命令:

INSERT INTO
  widget_ids (widget)
SELECT DISTINCT
  widget
FROM
  widgets

现在,这只是一个例子。如果您想要一个长期解决方案,您可能希望在 widget_ids 表中为您的“小部件”字段编制索引,并且您希望确保为每个新小部件输入一个值。


编辑:哦,另外,要获得您列在第二位的确切表,您可以将 widgets 表左连接到 widget_ids 表:

SELECT
    w.widget,
    wi.widget_id
FROM
    widgets w
LEFT JOIN
    widget_ids wi
  ON
    w.widget = wi.widget

当然,索引是您的 friend 。

关于mysql - 为sql中的每个唯一值插入增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/710519/

相关文章:

sql - PostgreSQL 中的空 GROUP BY

MySQL GROUP BY 和合并列

MySql 多表与单表 : performance

php - 谁能推荐一个可以写入 SQL 数据库的 jQuery Shotbox 插件?

mysql - 如何在 MYSQL 中通过另一列选择具有 MAX(列值)、PARTITION 的行?

c# - 带后缀增量的三元运算符赋值

r - 将变量递增 N 次并将答案存储在矩阵中

php - 在cakephp中更新多表

c - 理解 C 中的复杂表达式

mysql - SQL Duplicates - 没有找到所有的