我正在尝试根据我从另一个表中提取的值进行多次插入。基本上,我需要为所有现有用户提供访问以前可以访问其他服务的服务。 Table1将获取数据并运行一个作业来执行此操作。
INSERT INTO Table1 (id, serv_id, clnt_alias_id, serv_cat_rqst_stat)
SELECT
(SELECT Max(id) + 1
FROM Table1 ),
'33', --The new service id
clnt_alias_id,
'PI' --The code to let the job know to grant access
FROM TABLE2,
WHERE serv_id = '11' --The old service id
我在id上遇到主键约束错误。
请帮忙。
谢谢, 科林
答案 0 :(得分:0)
这个查询是不可能的。 max(id)子选择将仅评估ONCE并为父查询中的所有行返回相同的值:
MariaDB [test]> create table foo (x int);
MariaDB [test]> insert into foo values (1), (2), (3);
MariaDB [test]> select *, (select max(x)+1 from foo) from foo;
+------+----------------------------+
| x | (select max(x)+1 from foo) |
+------+----------------------------+
| 1 | 4 |
| 2 | 4 |
| 3 | 4 |
+------+----------------------------+
3 rows in set (0.04 sec)
您必须多次运行查询,对于您尝试复制的每条记录,都需要执行一次。这样,max(id)将从上一个查询中获取ID。
答案 1 :(得分:0)
是否要求Table1.id为增量内联?如果没有,只需将clnt_alias_id添加到Max(id)即可。这是一个讨厌的解决方法,你应该尝试将该列的类型更改为auto_increment,就像Marc B建议的那样。