2017-02-24 181 views
0

我想有一個INSERT INTO查詢我更新的哪一個字段是一個計算var'mycount' - 這將是查詢中插入的行的編號。INSERT INTO與增量變量

例如: 如果我插入3行,我希望這個var對於插入的第一行是'1',對於第二行是'2',等等。

SET @mycount=0; 
INSERT INTO my_table 
(@mycount,field1,field2,field3...) 
SET @[email protected]+1; 
SELECT @mycount,field1,field2,field3.. 
FROM my_table 
WHERE id IN (id1,id2,id3..); 

此代碼返回錯誤。 如何在INSERT INTO查詢中聲明一個變量,並使其每插入一行都增加一個變量?

重要 - 我不需要AUTO-INCREMENT列 - 這是隻需在此特定INSERT INTO查詢中執行的計算的一部分,它只是計算的一部分。 我需要的是(number_of_inserted_row + some_other_calculation)的計算,但爲了解決問題,我只是簡化了它。

+1

爲什麼不使用'auto_increment'? –

+0

你可以這樣做,使用添加新的字段,你想插入像count_number和定義自動遞增此字段,並不需要插入此查詢 –

+0

檢查更新答案 –

回答

1

那麼,通常一個auto_increment列用於此。如果你不希望不管是什麼原因,你可以做這樣的:

INSERT INTO my_table 
(your_quasi_auto_increment_column, field1, field2, field3...) 
SELECT (@mycount := @mycount + 1) + <other_calculation>, field1, field2, field3.. 
FROM my_table 
, (SELECT @mycount := 0) var_init_query_alias 
WHERE id IN (id1,id2,id3..); 
+0

我不能使用自動遞增作爲列因爲它是一個特定的只是我需要它的情況。完整的表達式僅使用自動增量作爲其一部分。我需要的字段是(計算+ number_of_inserted_row_in_current_query)。所以如果我每次運行5行插入3行 - 它仍然會給我(1,2,3,4,5),而不是一個不斷遞增的主數字。我嘗試運行您的查詢,但它給出了一個錯誤.. – Yaron

+0

我設法運行您的查詢..(@mycount在第一個INSERT INTO語句應該是一個字段名)。但 - 如果我希望我的計算是(@ mycount +其他計算),我該怎麼做? – Yaron

+0

是的,你說得對,它當然應該是一個字段名稱。複製粘貼它從你沒有注意到。如果你的「其他計算」導致一個數字,你可以用簡單的算術運算符來計算。如果它是某種文本,使用'CONCAT()'將文本和數字放在一起。你有特定的錯誤信息嗎?什麼在您的計算中不起作用? – fancyPants

0

,你可以做到這一點使用添加新申請要插入像count_number並定義自動遞增該申請,而不是需要在此查詢插入

SET @test=1; 
INSERT INTO test (`test`,`test2`,`test3`) 
SELECT (@test := @test +1) AS `test`,`test2`,`test3` 
FROM test 

如果要添加新的文件,然後再 檢查此代碼

SET @count_value=0; 
INSERT INTO test (`count_value`,`test`,`test2`,`test3`) 
SELECT (@count_value := @count_value +1) AS `count_value`,`test`,`test2`,`test3` 
FROM test 
在my_table1

加場count_number並鍵入t並添加自動增量,那麼它將工作

+0

但我不需要主鍵..我已經有了一個。它只是在我正在運行的INSERT INTO查詢中,我想要某個字段接收(number_of_inserted_row + another_number)的值。當我運行查詢一次並插入2行時,它應該是(1 + another_number),(2 + another_number)。當我用3行再次運行時,它應該是(1 + another_number),(2 + another_number),(3 + another_number)。 – Yaron

+0

檢查此更新的答案 –