我的查询如下所示:
INSERT INTO table1 (lfd, somedata)
select (select max(lfd) + 1 from table1), somedata from table2Table2有多行。所以我希望在table1中插入多个行。这是可行的,但是对于所有插入的行,lfd都被设置为相同的数字。
因此,如果max(ldf) +1对于插入的第一行是"2“,那么对于后面的所有行也是"2”。这是不正确的,因为下一行的max(lfd) +1当然应该返回"3“。
如何告诉mysql为每个insert重新计算子查询?
我不能接触表结构,因为我将数据从一个php库迁移到另一个不同的php库中。表的结构由应用程序控制。
在Oracle中,我只需定义一个序列并在子选择中选择squeencename.nextval即可。-我非常确定这会起作用,但据我所知,mysql不提供序列,对吧?
发布于 2012-05-01 03:55:46
试一次:
SELECT MAX(lfd) + 1 INTO @i FROM table1;
INSERT INTO table1 (lfd,col1,...)
SELECT @i:=@i+1,somedata,... FROM SomeTable;本质上,这将使用一个变量作为序列,使用表中当前的最大id对其进行初始化。
请注意,如果在此查询运行时将行插入到table1中,则可能会出现并发问题。
https://stackoverflow.com/questions/10389214
复制相似问题