我尝试在表A中“复制”几行。这个表(A)只有两个外键字段。一个引用表B,另一个引用表C.
现在我想从A中取几行并将它们重新插入(复制)到A.这样做我正在更改其中一个外键(FK1)。
INSERT INTO `A` (`FK1`, `FK2`) VALUES (".$newFK.", 1);
此代码没有任何问题。但我需要复制不止一行。当然,我可以做一个SELECT-Statement并使用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-Clause中更改的FK。我试图从A作为Asource执行SELECT-Statement选择,但它也失败了。
知道它失败的原因吗?
答案 0 :(得分:0)
尝试子查询:
"INSERT INTO A
(
FK1,
FK2
)
SELECT
FK1,
FK2
FROM
(SELECT
{$newFK} AS FK1,
FK2
FROM
A
WHERE
FK1 = {$tobeduplicatedFK}) x0;"