gpt4 book ai didi

MySQL INSERT INTO 查询列值等于另一个 SQL SELECT 查询

转载 作者:行者123 更新时间:2023-11-29 19:31:23 25 4
gpt4 key购买 nike

有人可以指导我以下查询的正确方向吗?它在 phpMyAdmin 下不起作用。

INSERT INTO `Setting` 
(`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`)
VALUES
(NULL, 0, 'howItWorks', 'Some URL', NULL, NULL, NULL, -1, NULL),
(NULL, 0, 'howItWorksThumb', 'Some URL', (SELECT id FROM Setting WHERE name = 'howItWorks'), NULL, NULL, -1, NULL);

在 PostgreSQL 下也可以进行相同类型的查询。

我收到错误: #1093 - 您无法在 FROM 子句中指定用于更新的目标表“设置”

问题是对与 LAST_INSERT_ID() 解决方案相关的问题的更新说明:

使用LAST_INSERT_ID()解决方案;子行应立即插入到父行之后。

我想在插入父行后不立即获取子行的parentId。解决方案是什么?

如果我想为同一父行添加两个子项怎么办?

最佳答案

MySQL 不允许您在子查询中从您在主查询中插入的同一个表中SELECT。因此,您需要将其拆分为两个 INSERT 查询:

您可以使用LAST_INSERT_ID()来获取在最后一个INSERT中分配的自动增量ID,而不是使用子查询。

INSERT INTO `Setting` (`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`) 
VALUES (NULL, 0, 'howItWorks', 'Some URL', NULL, NULL, NULL, -1, NULL);
INSERT INTO `Setting` (`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`)
VALUES (NULL, 0, 'howItWorksThumb', 'Some URL', LAST_INSERT_ID(), NULL, NULL, -1, NULL);

不幸的是,使用LAST_INSERT_ID()仍然不允许您将它们合并到一个查询中,因为它在执行任何插入之前调用该函数。

如果稍后要执行第二次插入,则可以使用普通的 INSERT ... SELECT ... 来完成:

INSERT INTO `Setting` (`id`, `type`, `name`, `value`, `parentId`, `createdAt`, `updatedAt`, `createdById`, `updatedById`) 
SELECT NULL, 0, 'howItWorksThumb', 'Some URL', id, NULL, NULL, -1, NULL
FROM Setting
WHERE name = 'howItWorks'

关于MySQL INSERT INTO 查询列值等于另一个 SQL SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41754530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com