2017-04-02 7 views
0

テーブル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を選択しようとしましたが、失敗しています。

なぜそれが失敗しているのでしょうか?

+0

クエリを実行し、再び、それはエラー、 'SHOW ENGINE INNODB STATUSを実行すると、'。結果の出力をスクロールして、 'LATEST FOREIGN KEY ERROR'というセクションを見つけます。これにより、挿入しようとした特定の値が親テーブルに存在しないことがわかります。 –

+0

あなたが何を入れているのかを変えているなら、どのように "複製する"のですか? (そして、引用符で囲むことは、あなたが説明しようとしなかったことを魔法のように教えてくれません)。PS [mcve]を読んで行動してください。 *あなたのコード、入力、予想される出力、エラーなどを含む出力をすべて与えます。* – philipxy

+0

一重引用符はなぜですか? – philipxy

答えて

0

は、サブクエリをお試しください:

"INSERT INTO A 
(
    FK1, 
    FK2 
) 
SELECT 
    FK1, 
    FK2 
FROM  
    (SELECT 
     {$newFK} AS FK1, 
     FK2 
    FROM 
     A 
    WHERE 
     FK1 = {$tobeduplicatedFK}) x0;" 
+0

チップをありがとうが、それもうまくいかなかった。それでも同じエラーが発生します。 –

+0

両方のバージョンを試しても問題ありません。結局、彼らは同じことを言います。だからまだ失敗している。 –

+0

foreign_keysでエラーが発生している可能性があります。あなたは両方のキーをどのように定義したかを見せてもらえますか? –

関連する問題