0

30 列 (同じ変数名、別の年のデータ) を持つ 2 つのテーブル A と B があり、主キーはなく、それぞれほぼ 100 万のレコードがあります。

( 、スペース、-、文字、数字を含む) と比較A.X1し、外部結合の結果を別のテーブル C (同じ 30 列) に挿入したいので、A のすべての行があり、B!=A on B.X1) .B.X1nvarchar8

例:

表 A

X1   X2   X3 ..... X30
11   E     R .....  G
12   R     4        L
13  S      5        NULL   
14  D      T        NULL

表 B

X1   X2   X3 ..... X30
11   E     R .....  G
12   R     4        L
15  R2     56        NULL   
16  R1      T1        NULL

結果のテーブル C

X1   X2   X3 ..... X30
11   E     R .....  G
12   R     4        L
13  S      5        NULL   
14  D      T        NULL
15  R2     56        NULL   
16  R1      T1        NULL

それ、どうやったら出来るの。

私は試した

INSERT INTO C
SELECT *
from A
full outer join B
on A.X1 = B.X1

私が得るエラー

メッセージ 213、レベル 16、状態 1、行 1
挿入エラー: 列名または指定された値の数がテーブル定義と一致しません。

現在空であるCを作成しました。

4

3 に答える 3

0

テーブルを結合して * を返すため、クエリは機能しません。必要な列数の 2 倍の結果が得られません。本当にやりたいことは、テーブル A からすべてを選択してから、テーブル B のすべてのレコードを (結合するのではなく) APPEND することです。追加は、UNION を使用して実現されます。ここにいくつかのサンプルコードがあります。注: SELECT * は絶対に使用しないでください。以下を追加して、特定の名前のフィールドを正しい順序で含めます。

また、クエリが A のレコードの重複である B のレコードを自動的に除外するように、UNION ALL ではなく UNION を使用しています。

SELECT FIELDS...
FROM TABLEA
UNION
SELECT SAME_FIELDS...
FROM TABLEB
于 2013-08-01T16:16:14.220 に答える