varchar
プライマリID(aではなく)を除いて、フィールドが異なる2つの既存のテーブルがありますint
。基本的にこれら2つをマージした、3番目のテーブルを作成します。これにより、特定の主キーに対して、すべてのフィールドが1つのテーブルに含まれるようになります。
これはどのように行うことができますか?
varchar
プライマリID(aではなく)を除いて、フィールドが異なる2つの既存のテーブルがありますint
。基本的にこれら2つをマージした、3番目のテーブルを作成します。これにより、特定の主キーに対して、すべてのフィールドが1つのテーブルに含まれるようになります。
これはどのように行うことができますか?
CREATE TABLE result AS
(SELECT first.*,
second.f1,
second.f2,
second.f3
FROM first
INNER JOIN second
ON first.id = second.id);
ビューを取得するには、「TABLE」を「VIEW」に置き換える以外は同じようにします。ビューではなくテーブルを使用する場合は、デフォルトでは追加されないため、必ず主キーを追加してください。
特定のプライマリIDの両方のテーブルに1つの行があり、これが機能することが確実な場合は、次のようになります。
SELECT
tablea.field1, tablea.field2, tablea.field3, ... tablea.fieldn, <---- field list
tableb.field1, tableb.field2, tableb.field3, ... tableb.fieldm <---- field list
FROM
tablea, tableb
WHERE
tablea.primaryID = tableb.primaryID
tableaとtablebのプライマリIDフィールドが実際には必要ない場合は、フィールドリストから除外することをお勧めします(このクエリでは、tablea.primaryID = tableb.primaryID
条件により両方に同じ値が含まれます)。
構文は、aについても比較的似てVIEW
います。
MS SQLの場合、これを使用します
SELECT * INTO result
FROM table1
INNER JOIN table2
ON table1.id = table2.id
なぜ新しいテーブルを作成するのですか?データが必要なときはいつでもクエリを実行してみませんか?主キーで2つのテーブルを結合するだけの場合、データアクセス時間の大部分は、データをアプリケーションにマーシャリングするために費やされます。テーブルに参加する前に多くの時間を節約することはなく、多くのスペースを消費することになります。さらに、ソーステーブルを初めて更新するのを待っているだけで、更新スクリプトを実行して変更を結合されたテーブルにコピーするのを忘れて、足の親指を狙っています。重複データは悪ですが、必要な場合もあります。これはその時のようには聞こえません。