【问题标题】:MySQL INSERT using SELECT with field that increments with each inserted rowMySQL INSERT 使用 SELECT 与每个插入行递增的字段
【发布时间】:2016-10-20 07:03:00
【问题描述】:

我有两个表,其列如下所示:

表_1: key | value 1 | apple 2 | banana 3 | carrot

Table_2: sub_index | value

使用存储过程,我想使用 INSERT...SELECT 将 Table_1 中的行插入到 Table_2 中,这样每次执行查询时,sub_index 从 1 开始。

例如,在我第一次运行查询 INSERT INTO TABLE_2 (value) SELECT value FROM TABLE_1 WHERE key=2之后

Table_2 应如下所示: sub_index | value 1 | banana

然后如果我运行另一个查询 INSERT INTO TABLE_2 (value) SELECT value FROM TABLE_1 WHERE key < 4

Table_2 现在将如下所示: sub_index | value 1 | banana 1 | apple 2 | banana 3 | carrot

如果我运行进一步的查询 INSERT INTO TABLE_2 (value) SELECT value FROM TABLE_1 WHERE key <= 2

Table_2 现在将如下所示: sub_index | value 1 | banana 1 | apple 2 | banana 3 | carrot 1 | apple 2 | banana

换句话说,每次我运行查询时,我都希望sub_index 字段从 1 开始,并为查询插入的每条记录递增。

如何仅使用 SQL 为 sub_index 实现此行为? (即不使用 PHP 编程。)

感谢您的任何建议!

【问题讨论】:

  • 你试过了吗??
  • 我已经澄清了这个问题。每次运行查询时,我都希望 sub_index 字段从 1 开始。
  • 为什么要存储这些派生数据?

标签: mysql


【解决方案1】:
 set @row_nb=0;
 INSERT INTO Table_2 (`sub_index`,`value`) select (@row_nb := @row_nb +1) as `key`,`value` from Table_1 WHERE `key`< 4 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2015-09-20
    • 2018-12-27
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多