0

一部のデータを2つのテーブルから新しいテーブルに移行しようとしていますが、その方法を理解するのに苦労しています。

データ:

table fh rows: A, B, C, X, Y
table fhgb rows: B, C
table gvsi (currently empty) rows: A, X, Y
A is unique, and B+C is unique

完了すると、テーブルgvsiにはfhのすべての行が含まれるはずです。ここで、X = valueであり、行はまだfhgbにありません。

これはgvsiへの1回限りのデータ移行であるため、パフォーマンスはそれほど重要ではありません。fhには3600万行あり、私が気にかけているのは1200万行です(X =値)。fhgbには1,000万行あります。完了すると、gvsiに約200万行(12mil〜10mil)が含まれると予想しています。

私はグーグルでたくさんのことを試しましたが、何も機能しません(JOIN、サブクエリなど)誰かがこれを行う方法を理解するのを手伝ってくれますか?

4

4 に答える 4

1
INSERT INTO `gvsi` (A, X, Y)
SELECT A, X, Y
FROM fh 
WHERE X = 'value'
    AND ( fh.B NOT IN (SELECT DISTINCT B FROM fhgb)
        AND fh.C NOT IN (SELECT DISTINCT C FROM fhgb)
    );

それはそれをするべきです。

于 2013-01-18T14:27:45.413 に答える
0

1ステップ

INSERT INTO gvsi 
SELECT fh.a, fh.x, fh.y FROM fh 
WHERE fh.x = value AND NOT EXISTS 
(SELECT 1 FROM fhgb WHERE fh.b = fhgb.b AND fh.c = fhgb.c);

2つのステップ:

DELETE FROM fh WHERE EXISTS 
(SELECT 1 FROM fhgb WHERE fh.b = fhgb.b AND fh.c = fhgb.c);
INSERT INTO gvsi SELECT fh.a, fh.x, fh.y from fh WHERE fh.x = value;

最後に、結果に満足できない場合は、同じことを繰り返すことができるため、最初のものの方が安全です。ただし、条件により遅くなる場合があります。

于 2013-01-18T14:30:33.553 に答える
0

単純なselectinsertステートメントを使用して2つのテーブルを1つのステップで結合すると、簡単で複雑に見えます。

 insert Into 3d_Table ( column1, column2, column3) 
  select column1, column2, column3
   ( 
    select column1, column2, column3 
    from 2d_table
    union 
    select column1, column2, column3 
    from 2d_table
  )

これがあなたを助けるなら、試してみてください

于 2013-01-18T14:35:30.703 に答える
0

私たちのDB担当者は、2分で答えを思いつきました。

INSERT INTO gvsi (A, B, X, Y)
SELECT fh.A, fh.B, fh.X, fh.Y
FROM
f_h fh
LEFT OUTER JOIN f_h_g_b fhgb ON fh.A=fhgb.A and fh.B=fhgb.B
WHERE fhgb.A IS NULL

これらの答えのいくつかがうまくいかないというわけではありませんが、これは最初の試みでうまくいきました。ご覧いただきありがとうございます。私はこれらの他の答えのいくつかも試してみて、それらが機能するかどうか、そしてそれらがより速く機能するかどうかを確認する必要があります。

于 2013-01-23T14:55:11.760 に答える