INSERT INTO与增量变量

问题描述:

我想有一个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

检查更新答案 –

那么,通常一个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

,你可以做到这一点使用添加新申请要插入像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

检查此更新的答案 –