2012-01-28 30 views
0

これは理解しにくいかもしれないので、私はそれをよりよく記述する必要があるかどうかを教えてください。私は次の構文で3つのテーブルにtableA、TableBのを持っている、と言うTABLEC:mysqlテーブルの挿入を挿入する

CREATE TABLE tableA (
    data_point_1 VARCHAR(30), 
    data_point_2 VARCHAR(30), 
    data_point_3 VARCHAR(30) 
); 

CREATE TABLE tableB (
    bid INTEGER AUTO_INCREMENT, 
    cid INTEGER AUTO_INCREMENT, 
    data_point_1 VARCHAR(30), 
); 

CREATE TABLE tableC (
    cid INTEGER AUTO_INCREMENT, 
    data_point_2 VARCHAR(30), 
    data_point_3 VARCHAR(30) 
); 

今、私が何をしたいのかTABLEBとTABLECににtableAからデータを転送しています。だから、本質的に、私は何かしたい:(私は仮定の選択が必要になります)

INSERT INTO tableB 
SELECT 
    data_point_1, 
    (SELECT cid FROM tableC WHERE (INSERT INTO tableC SELECT data_point_2, data_point_3 FROM tableA)) 
FROM tableA 

を私は上記を試していないが、INSERTは実際の値を返さないので、私はそれが不可能であると仮定していますしかし、私の質問はどのように私はCからデータを挿入することができますし、同時にCからのIDと別のデータポイントを取得し、それらの両方をBに入れます。

私はおそらく破ることができますそれは2つの挿入ステートメントにしてCのどこでdata_point_2 = data_point_2とdata_point_3 = data_point_3の選択を行うが、私はちょうど1つのクエリでそれを行う方法があるのだろうか?私は何かを見つけることができなかったので、私はここで尋ねると思った。

もう一度:私は2つの別々の挿入クエリをしたくありません。私は次のようにあなたがITIN 2文を行うことができます

+0

回答はありませんか?まだこれを実行可能な方法を見ていない... –

+0

あなたは不可能(MySQLのためにとにかく)を求めているかもしれません。あなたが懸念していることはわかりませんが、トランザクションの仕組みを調べることができます。彼らはあなたが多くの発言を事実上「一瞬で」起こすことができる方法です。 – Andrew

+0

誰かが解決策を見つけることができないので、見た目からは不可能かもしれません。 Thanks =/ –

答えて

0

解決策があることになりそうです解決策はありません/私は複数の挿入でそれを行う必要がありますね。みんな助けてくれてありがとう。

0

(原因理論的には、私はさらにそれを抽象化する必要がある場合があります)1でそれを行うことができるようにしたい:

INSERT INTO TableB(data_point_1) SELECT data_point_1 FROM TableA 
INSERT INTO TablEc(data_point_2,data_point_3) SELECT data_point_2, data_point_3 FROM TableA 
+0

これは、tableBをtableCに向かわないので動作しません。 tableB.cidがtableCの適切な行にマップされていることを確認する必要があります。そして、すでに2つのインサートでそれを行う方法をすでに知っていると言いましたが...ただ1つのクエリステートメントで可能かどうかは疑問でした。 –