我的查询是这样的:
INSERT INTO table1 (lfd, somedata)
select (select max(lfd) + 1 from table1), somedata from table2
Table2 有多行。所以我想将多行插入到 table1 中。 这行得通,但 lfd 被设置为所有插入行的相同数字。
因此,如果插入的第一行的 max(ldf) + 1 为“2”,则后续所有行的值也为“2”。这是不正确的,因为下一行的 max(lfd) + 1 当然应该返回“3”。
我如何告诉 mysql 为每个插入重新评估子查询?
我无法触及表结构,因为我将数据从一个 php-gallery 迁移到另一个不同的 php-gallery。表的结构在应用程序的控制之下。
在 Oracle 中,我会简单地定义一个序列并在子选择中选择 squeencename.nextval。 - 我很确定这行得通,但据我所知,mysql 不提供序列,对吗?
最佳答案
试试这个:
SELECT MAX(lfd) + 1 INTO @i FROM table1;
INSERT INTO table1 (lfd,col1,...)
SELECT @i:=@i+1,somedata,... FROM SomeTable;
本质上,这只是使用一个变量作为一个序列,用表中的当前最大 id 初始化它。
请注意,如果在此查询运行时将行插入到 table1
中,您可能会遇到并发问题。
关于mysql - 如何为 mysql 中插入的每一行更新子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10389214/