テーブルAに複数の行を複製しようとしています。このテーブル(A)には2つのフィールドしかありません。 1つはテーブルBを参照し、もう1つはテーブルCを参照します。Mysql:複数の外部キーを選択して挿入すると失敗します
今度はAからいくつかの行を取り込み、それらをAに再挿入(複製)したいと思います。 FK1)。
INSERT INTO `A` (`FK1`, `FK2`) VALUES (".$newFK.", 1);
このコードは問題なく動作します。しかし、私は単なる行以上のものを複製する必要があります。もちろん、SELECT文を実行してfetch_arrayを使用してすべての行を1つずつ挿入することはできますが、より洗練された方法で解決したいと思います。このように:
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を使用しているので、何かが台無しかもしれないと思いました。私はAs-AsourceからSelect-Statementを選択しようとしましたが、失敗しています。
なぜそれが失敗しているのでしょうか?
クエリを実行し、再び、それはエラー、 'SHOW ENGINE INNODB STATUSを実行すると、'。結果の出力をスクロールして、 'LATEST FOREIGN KEY ERROR'というセクションを見つけます。これにより、挿入しようとした特定の値が親テーブルに存在しないことがわかります。 –
あなたが何を入れているのかを変えているなら、どのように "複製する"のですか? (そして、引用符で囲むことは、あなたが説明しようとしなかったことを魔法のように教えてくれません)。PS [mcve]を読んで行動してください。 *あなたのコード、入力、予想される出力、エラーなどを含む出力をすべて与えます。* – philipxy
一重引用符はなぜですか? – philipxy