我尝试“复制”表 A 中的几行。该表 (A) 只有两个字段,它们是外键。一份参考表 B,另一份参考表 C。
我想从 A 中取出几行并将它们重新插入(复制)到 A 中。这样做我正在更改其中一个外键 (FK1)。
INSERT INTO `A` (`FK1`, `FK2`) VALUES (".$newFK.", 1);
这段代码工作没有任何问题,但我需要复制的不仅仅是一行。当然,我可以做一个 select 语句并使用 fetch_array 逐行插入每一行,但我想更优雅地解决它。像这样:
INSERT INTO A (`FK1`, `FK2`) SELECT ".$newFK.", `FK2` FROM `A` WHERE `FK1` = '".$tobeduplicatedFK."';
我也尝试过
INSERT INTO `A` SET `FK1` = ".$newFK.", `FK2` = (SELECT `FK2` FROM `A` WHERE `FK1` = '".$tobeduplicatedFK."');
不幸的是,这些都不起作用。但我确实收到了“无法添加或更新子行:外键约束失败” - 与 FK1 相关的错误。由于不优雅的版本正在运行,因此存在新的 FK1 ($newFK)。我也检查了旧的 FK1 ($tobeduplicatedFK),它也存在。
我想可能出了什么问题,因为 select 语句位于同一个表上,并且使用了必须在 WHERE 子句中更改的 FK。我尝试执行从 A 作为 Asource 选择的 SELECT 语句,但它也失败了。
知道为什么失败吗?
尝试子查询:
"INSERT INTO A
(
FK1,
FK2
)
SELECT
FK1,
FK2
FROM
(SELECT
{$newFK} AS FK1,
FK2
FROM
A
WHERE
FK1 = {$tobeduplicatedFK}) x0;"