SQL:外部连接String上的两个表,并插入类似的另一个

时间:2013-08-01 15:59:42

标签: sql outer-join

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

我想将A.X1B.X1nvarchar8,包含空格, - ,字母和数字)进行比较,并将外部联接结果插入另一个表C(具有相同的30列)所以我有所有A行,其中B!= B.在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

我得错误

  

Msg 213,Level 16,State 1,Line 1
  插入错误:列名或提供的值数与表定义不匹配。

我创建了C,目前是空的。

3 个答案:

答案 0 :(得分:1)

insert  C
select  *
from    A
union all
select  *
from    B
where  not exists
       (
       select  *
       from    A
       where   X1 = B.X1
       )

答案 1 :(得分:0)

您的查询将无法正常工作,因为您正在加入表格并重新调整*,结果不合适的是您需要的列数的两倍。 你真正想要做的是从表A中选择所有内容,然后选择APPEND(而不是加入)表B中的所有记录。 使用UNION实现追加。这是一些示例代码。注意:永远不要使用SELECT *。 Addapt接下来以正确的顺序包含特定命名的字段。

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

SELECT FIELDS...
FROM TABLEA
UNION
SELECT SAME_FIELDS...
FROM TABLEB

答案 2 :(得分:-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