mysql插入值,具有相同表列的计数

xqnpmsa8  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(442)

我很难理解为什么这样做行不通,我确实在这里阅读了很多官方文档和答案,但仍然很难弄清楚如何在一个关于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个查询解决方案感兴趣。我有一个文件,我错过了一些知识,使这项工作。
先谢谢你。

j13ufse2

j13ufse21#

mysql不允许在插入、删除和更新中直接引用更新的表。
必须将查询嵌套在另一个查询中,如下所示:

INSERT INTO PREDMETIP
    (`strp_ID`, `predp_nas`)
VALUES(
 1, 
 (SELECT counter + 1 FROM (SELECT COUNT(strp_ID) counter FROM PREDMETIP WHERE strp_ID = '1') t)
);

请看演示。

disbfnqx

disbfnqx2#

看起来你想要 insert ... select 语法:

INSERT INTO PREDMETIP(strp_ID, predp_nas)
SELECT 1, COUNT(*) + 1 FROM PREDMETIP WHERE strp_ID = 1
6qfn3psc

6qfn3psc3#

您需要为内部select指定一个别名,如下所示,以将其与主查询区分开。

INSERT INTO PREDMETIP
(`strp_ID`, `predp_nas`)
VALUES(1,  (SELECT COUNT(strp_ID) FROM PREDMETIP p WHERE p.strp_ID = '1')+1);

相关问题