我的表中通常有“ id”,但我还需要一个“ code”,类似于id,但特定于年份。这意味着它将以某种方式自动增加,但是每新的一年将以1开始。
当我插入新行时,我只是使用

 SELECT MAX(code) WHERE YEAR(time) = YEAR(CURRENT_DATE)


然后加一

但是我的项目已经在运行,我想进行一个查询,该查询将为已经存在的行设置这些代码。

所以现在我的桌子看起来像这样->


  文字2011'NULL'||文字2011'NULL'||文字2011'NULL'||文字2012
  'NULL'||文字2012'NULL'


我需要将其更改为


  文字2011 1 ||文字2011 2 ||文字2011 3 ||文字2012 1 ||文字2012
  2


有任何想法吗?

最佳答案

我认为您可以使用这样的查询:

 SELECT T1.id, T1.year, COUNT(T2.id) AS new_id
 FROM `table` T1
 JOIN `table` T2 ON T1.id > T2.id AND T1.year = T2.year
 GROUP BY T1.id, T1.year
 ORDER BY T1.year, new_id


只是更改为一个更新。不过,这可能需要一些时间,具体取决于表的大小。

编辑-更新查询:

 CREATE TABLE temp_table (
   id INT NOT NULL,
   new_id NOT NULL,
   PRIMARY KEY (id)
 );

 INSERT INTO temp_table
   SELECT T1.id, COUNT(T2.id) AS new_id
   FROM `table` T1
   JOIN `table` T2 ON T1.id > T2.id AND T1.year = T2.year
   GROUP BY T1.id, T1.year
   ORDER BY T1.year, new_id;

 UPDATE `table` t
   SET t.new_id = (SELECT tmp.new_id FROM temp_table tmp WHERE tmp.id = t.id)
 WHERE t.new_id IS NULL;

 DROP TABLE temp_table;


未经测试,但应该非常接近。用表名和列名tableidnew_id替换year.

关于mysql - 我自己的自动增量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9567243/

10-11 02:40
查看更多