2011-07-19 3 views
0

現在、2つのテーブルからデータを抽出し、別のテーブルに挿入することを検討しています。 (例えば、理想的なデータで)次のように テーブル:テーブルのコピー/更新用のクエリを作成する

Table1 
T1ID(PK) T1Field1 
301  2011-07-01 
302  2011-07-01 

Table2 
T2ID(PK) T2Field2 T2Field3 T2Field4 
521  301  555  Apple 
522  301  666  Pear 


Table3 (new table) 
T3Field1 T3Field2  T3Field3 T3Field4 
301  2011-07-01 555   Apple 
301  2011-07-01 666   Pear 

探して最も少ない、最も効率的なクエリの次の操作を行うために使用する:

  1. Insert T1ID into T3Field1 + Insert T1Field1 into T3Field2

  2. Update T3Field3 where T3Field1 = T2Field2 (for each) - *

最初のクエリにmysql insertを使用しただけです。これには、タイムスタンプ情報が含まれているため、最初に実行する必要があります。

* 1対多が存在するため、ここではINNER JOINは不運になり、最初の行のみが挿入されます。

私はすべての結果を選択してから各レコードに対してwhileループ/更新を選択できますが、可能な限り最小限に抑えようとしています。

ロジックに関する2番目の意見が必要です。

答えて

0

私は以下のコードをテストし、あなたの理想的なデータと一致します。迅速な応答と、例えばコードのTable2

INSERT INTO Table3 
SELECT 
Table1.T1ID AS T3Field1, 
Table1.T1Field1 AS T3Field2, 
Table2.T2Field3 AS T3Field3, 
Table2.T2Field4 AS T3Field4 
FROM Table1, Table2 
WHERE 
Table1.T1ID = Table2.T2field2 
+0

おかげで、それには、対応する一致が存在しないのでしかし、Table1の第2行が失われます。この方法でクエリを作成しようとしましたが、両方のテーブルから新しいテーブルにデータを取得できました。実際のデータベースははるかに大きく、同じクエリ内のより多くのテーブルからデータを取得する必要があるため、データの欠落による行の値のエラーが現在発生しています。 さらなる問題がある場合は、私は再度投稿します。再度、感謝します。 –

+0

それは確かに追加のテーブルとより複雑になるでしょう。正しい順序と外部の結合が問題を解決する可能性があります。 – Sukumar

関連する問題