I have a table like this
ID | NAME |
---|---|
1 | MICHAEL |
2 | JORDAN |
5 | DONALD |
7 | JAYCE |
8 | ROY |
11 | JOHN |
16 | DOE |
Is there a way to recount the ID from the beggining so there is a sequel and keeping the others columns intact to be like this:
ID | NAME |
---|---|
1 | MICHAEL |
2 | JORDAN |
3 | DONALD |
4 | JAYCE |
5 | ROY |
6 | JOHN |
7 | DOE |
Thank you!
Advertisement
Answer
If your MySQL
version supports window function, you could use ROW_NUMBER
.
Suppose you have the following table:
create table test( ID int NOT NULL , NAME VARCHAR (25) ); insert into test values (1,'MICHAEL'), (2,'JORDAN'), (5,'DONALD'), (7,'JAYCE'), (8,'ROY'), (11,'JOHN'), (16,'DOE');
Using row_number would give:
select ID,NAME, row_number() over(order by ID ASC ) as rownum from test
Result:
ID NAME rownum 1 MICHAEL 1 2 JORDAN 2 5 DONALD 3 7 JAYCE 4 8 ROY 5 11 JOHN 6 16 DOE 7
Now, create another table test2
.
create table test2( ID int NOT NULL , NAME VARCHAR (25) );
We can use INSERT INTO SELECT
:
INSERT INTO test2( ID, NAME ) WITH cte AS ( select ID,NAME, row_number() over(order by ID ASC ) as rownum from test t1 ) SELECT rownum,NAME FROM cte; select * from test2;
Result:
ID NAME 1 MICHAEL 2 JORDAN 3 DONALD 4 JAYCE 5 ROY 6 JOHN 7 DOE
See fiddle