mysql - 如何为 mysql 中插入的每一行更新子查询?

标签 mysql insert max subquery

我的查询是这样的:

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/

相关文章:

php - 在 Joomla 中的表之间移动行

javascript - 我可以让 Google Drive 电子表格像 MySQL 数据库一样工作吗?

java - 如何获取流的最大索引值

c - C中三个 float 中最快的最小最大值

mysql - 如何编写 SQL 查询来检查不同行的某个字段中是否具有相同的值?

MySQL - 无法添加外键约束

python - 使用python向mysql中插入数据

MySQL 插入语句时出现错误 1241

MySQL(SQLite): insert rows based on a query with multiple rows result

mysql - SQL - 试图找到两个表之间的最大计数