mysql - 重新评估每个 INSERT 的 MySQL 子查询

标签 mysql subquery

我正在尝试在同一个表中重复行。表 A 没有 auto_increment(不幸的是)。

INSERT INTO A (id, foreign_id, value)
    SELECT (SELECT MAX(id)+1 FROM A), 2, value
        FROM A WHERE foreign_id = 1;

但是(SELECT MAX(id)+1 FROM A)计算一次,因此将始终返回相同的 ID。在第二行插入时,查询将失败(主键重复)。

我首先尝试过:

INSERT INTO A (id, foreign_id, value)
    SELECT MAX(id)+1, 2, value
        FROM A WHERE foreign_id = 1;

但是MAX(id)+1考虑到WHERE foreign_id = 1 ,因此无法保证我会获得未使用过的 ID。

我该如何继续:

  • 有一个针对每个 INSERT 重新计算的子查询
  • 或者更一般地说:由于没有 auto_increment,我的表中出现重复行

最佳答案

您尝试过使用变量吗?

SET @max=SELECT MAX(id);
INSERT INTO A (id, foreign_id, value)
    SELECT @max:=@max+1, 2, value
        FROM A WHERE foreign_id = 1;

关于mysql - 重新评估每个 INSERT 的 MySQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678882/

相关文章:

php - 生成mysql统计信息

mysql - SQL - 遍历 MySQL 中的每一行表?

mysql - wamp 服务器 phpmyadmin 没有权限

mysql - 我可以在 INSERT 查询中使用 SELECT 子查询吗?

mysql - 使用从 mySQL 中的其他表中选择的结果更新表中的字段

sql - PostgreSQL:删除子查询返回的行

Java Rmi数据库连接?

mysql - 在 Laravel 查询构建器中使用 OR

mysql - SQL 慢速嵌套查询

mysql - Access 查询问题