2017-11-08 8 views
0

私は3つのテーブルを持っています。これらは、以下の構造を有する。0121表1(列1、列2)。表2(第3欄); 0123私は表1の表示列1、列2、列3、列4SQLテーブルから新しいカラムとして別のテーブルにカラムを追加します

を作りたい
表3(列4)

は、私が試した:

Alter table table1 
Add Column3 int 
Insert into table1(Column4) 
Select Column3 From table2 

私はTABLE1に次のように取得します:

Column 1 Column 2 Column 3 
VAL1  VAL1  NULL 
VAL2  VAL2  NULL 
NULL  NULL  VAL1 
NULL  NULL  VAL2 

が、私は取得したい:

Column1  Column2 Column3 
VAL1  VAL1  VAL1 
VAL2  VAL2  VAL2 
+0

重要でない場合でも、それがうまくいく場合は、更新のいくつかの種類を探している、これを試すことができます。論理が新しい値をどこに置くかについて教えてください。 –

+0

何で注文?例えば、表1は値(1,2)、(3,4)、(5,6)および表2の値(1)(2)(3)を有する。結果が(1,2,1)、(3,4,2)、(5,6,3)または(1,2,2)、(3,4,1)、(5,6,3) )またはまだいくつか? – vitalygolub

+0

私はそれらが注文されていると言及すべきではありません。私が言いたいのは、3つのテーブルすべてが同じ数の行を持ち、Table2のColumn 3をそのまま取り、Table 1のColumn 2の後に追加したいと思うということです。 – FlorineleXSS3

答えて

0

あなたはこのような場合には外部キーを使用する必要があります。

CONSTRAINT FK_Column1Column2 FOREIGN KEY (Column1) REFERENCES Table2(Column2) 

read about foreign keys here

0

追加し、既存の値を持つ列を更新するために探している場合は、次のクエリを使用し

WITH CTE AS 
    (
    SELECT ROW_NUMBER() OVER (ORDER BY COL1) rnO,COL3,COL1 FROM TABLE1 UNION ALL 
    SELECT ROW_NUMBER() OVER (ORDER BY COL3) rnO2, COL3,NULL FROM TABLE2 

    ) 
UPDATE TABLE1 SET COL3 = CTE.COL3 
FROM CTE WHERE TABLE1.COL1 =CTE.COL1 

SELECT * FROM TABLE1 
0

INSERTは、新しい行を表に追加するために使用されます。ただし、Table1にCol3とCol4を追加し、Table2とTable3の値でCol3とCol4を更新します。質問には言及されていないので、私はそれを楽しんでいるTable2とTable3のRow1からのデータはtable3のrow1に行くことです。これは、テーブルのいずれかに一致するキー値がなく、行を一緒に結合するため、ややこしいことです。

これを克服する簡単な方法の1つは、IDフィールドを各テーブルに追加し、それを使用してUPDATEクエリで同じ値の行をリンクさせることです。別のアプローチは、PARTITIONを使用することですが、データには定義されていないインデックスがあるため、各テーブルの行の順序は未定義です。

第3のオプションは、ストアドプロシージャを使用して自動増分[id]フィールドを含む3つの#tempテーブルを作成し、各テーブルのデータを各一時テーブルに追加することです。次に、tempテーブルを使用して#tempテーブルのtable1コピーのフィールドを更新し、最後に#tempテーブルのコピー(table1,2,3のすべてのフィールドを含む)を使用して、テーブル1を更新することができます。 #temp tableをcolumn1とcolumn2のtable1に設定します。

0

あなたは順序が

Alter table table1 
Add Column3 int 


update table1 t1 
set Column3 = (select colum3 
    from table2 t2 
    where t1.rownum = t2.rownum 
) 
関連する問題