這將需要兩個查詢。首先查詢您需要更改表中添加新列...我只是做了這些VARCHAR作爲那它是什麼樣子在我身邊......
設置:
CREATE TABLE my_table
(c1 VARCHAR(55)
,c2 VARCHAR(55)
,c3 VARCHAR(55)
,c4 VARCHAR(55)
);
INSERT INTO my_table VALUES
('a1' , 'b1' , 'c1', 'val1'),
('a1' , 'b1' , 'c1', 'val2'),
('a1' , 'b1' , 'c1', 'val3'),
('a2' , 'b2' , 'c2', 'val1'),
('a2' , 'b2' , 'c2', 'val2'),
('a3' , 'b3' , 'c3', 'val1'),
('a3' , 'b3' , 'c3', 'val2');
FIRST QUERY:
ALTER TABLE my_table
ADD COLUMN c5 VARCHAR(55);
在這裏我們只是增加了一個新的列..稱它爲C5。
第二個查詢:
UPDATE my_table mt,
(
SELECT
c4,
c1,
IF(@A = c1, @B := @B + 1, @B := 1) AS new_col,
@A := c1
FROM my_table
CROSS JOIN(SELECT @A := '', @B := 1)t
) temp
SET mt.c5 = new_col
WHERE mt.c4 = temp.c4
AND mt.c1 = temp.c1;
在這裏,我們做了一些計算,當它到達一個新的做增量每種類型和復位計數。然後在同一查詢更新表
第三個查詢:
SELECT * FROM my_table;
只是一種看完成的改變。
DEMO
OUTPUT:
+---+---+---+-------+--+
|c1 |c2 |c3 |c4 |c5|
+---+---+---+-------+--+
|a1 |b1 |c1 |val1 |1 |
|a1 |b1 |c1 |val2 |2 |
|a1 |b1 |c1 |val3 |3 |
|a2 |b2 |c2 |val1 |1 |
|a2 |b2 |c2 |val2 |2 |
|a3 |b3 |c3 |val1 |1 |
|a3 |b3 |c3 |val2 |2 |
+---+---+---+-------+--+
獎金:
只是爲了好玩,你也可以只運行查詢,如果你不想做一個新列桌子。像這樣:
SELECT c1, c2, c3, c4, new_col as c5
FROM
(
SELECT
*,
IF(@A = c1, @B := @B + 1, @B := 1) AS new_col,
@A := c1
FROM my_table
CROSS JOIN(SELECT @A := '', @B := 1)t
) as _outer_
你想這只是爲了選擇或你想插入命令? –
@JorgeCampos我需要創建另一列並更新新列。 – Boxuan
我明白了。然後這個措辭有點誤導。不要使用術語「自動增量」,這表明您希望在插入時自動生成值。 – RandomSeed