我很难理解为什么这样做行不通,我确实在这里阅读了很多官方文档和答案,但仍然很难弄清楚如何在一个关于insert的查询中实现这一点,如果可能的话,没有事务。
我需要这样的东西:
INSERT INTO PREDMETIP
(`predp_nas`)
VALUES((SELECT COUNT(strp_ID) FROM PREDMETIP WHERE strp_ID = '1')+1,
我需要这个结果:
| predp_id | strp_ID | predp_nas |
| -------- | ------- | --------- |
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 1 |
其中predp\u nas column是每个新插入的strp\u id column的计数+1。
CREATE TABLE PREDMETIP (
predp_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
strp_ID INT NOT NULL,
predp_nas INT(11) NULL
);
INSERT INTO PREDMETIP
(`strp_ID`)
VALUES(1),(1),(1),(2),(2),(3);
INSERT INTO PREDMETIP
(`strp_ID`, `predp_nas`)
VALUES(1,
(SELECT COUNT(strp_ID) FROM PREDMETIP WHERE strp_ID = '1')+1);
例如,我做了一把小提琴。
如果删除最后一个insert,则是表中的数据,但我需要第二个insert才能工作,并给出以下结果:
| predp_id | strp_ID | predp_nas |
| -------- | ------- | --------- |
| 7 | 1 | 4 |
很明显,从insert要插入的同一个表中选择计数时存在问题。也就是说,我知道如何在两个查询中进行事务处理。但如果可能的话,我对1个查询解决方案感兴趣。我有一个文件,我错过了一些知识,使这项工作。
先谢谢你。
3条答案
按热度按时间j13ufse21#
mysql不允许在插入、删除和更新中直接引用更新的表。
必须将查询嵌套在另一个查询中,如下所示:
请看演示。
disbfnqx2#
看起来你想要
insert ... select
语法:6qfn3psc3#
您需要为内部select指定一个别名,如下所示,以将其与主查询区分开。