0

我有两个表 A 和 B 有 30 列(相同的变量名,不同年份的数据),没有主键,每个都有近一百万条记录。

我想A.X1B.X1( nvarchar8,包含空格、-、字母和数字) 进行比较,并将外连接结果插入另一个表 C (具有相同的 30 列),所以我有 A 的所有行,其中 B!=A 在 B.X1) .

例子:

表 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

1
insert  C
select  *
from    A
union all
select  *
from    B
where  not exists
       (
       select  *
       from    A
       where   X1 = B.X1
       )
于 2013-08-01T16:11:06.053 回答
0

您的查询将不起作用,因为您要加入表并返回 *,结果会导致您需要的列数增加一倍。您真正想要做的是从表 A 中选择所有内容,然后追加(而不是连接)表 B 中的所有记录。追加是通过使用 UNION 来实现的。这是一些示例代码。注意:永远不要使用 SELECT *。添加以下内容,以正确顺序包含特定命名的字段。

另外,我使用的是 UNION 而不是 UNION ALL,以便查询自动排除 B 中与 A 中的记录重复的记录。

SELECT FIELDS...
FROM TABLEA
UNION
SELECT SAME_FIELDS...
FROM TABLEB
于 2013-08-01T16:16:14.220 回答
-1
Insert Into TableC
(
  -- List your fields explicitly
)
Select
    -- List all tableA.Fields explicitly
From tableA
Left Outer Join tableB On tableB.X1 = tableA.X1
Where tablB.X1 IS NULL
于 2013-08-01T16:10:05.137 回答