我想将 3 张桌子合二为一。我正在使用 SQL Server 2005。我尝试过FULL OUTER JOIN
,但结果中出现了重复的 ID。因此,非常感谢您的帮助。
+---------------+ +---------------+ +---------------+
| ID COL_A | | ID COL_B | | ID COL_C |
+---------------+ +---------------+ +---------------+
| a 2 | | b 1 | | a 1 |
| c 1 | | c 1 | | d 1 |
+---------------+ +---------------+ +---------------+
结果:
+---------------------------+
| ID COL_A COL_B COL_C |
+---------------------------+
| a 2 NULL 1 |
| b NULL 1 NULL |
| c 1 1 NULL |
| d NULL NULL 1 |
+---------------------------+
每个表都有不同的数据行。
这是创建表的代码:
declare @a table (
ID char(1),
COL_A int
)
declare @b table (
ID char(1),
COL_B int
)
declare @c table (
ID char(1),
COL_C int
)
insert into @a values ('a', 2)
insert into @a values ('c', 1)
insert into @b values ('b', 1)
insert into @b values ('c', 1)
insert into @c values ('a', 1)
insert into @c values ('d', 1)
select * from @a
select * from @b
select * from @c
谢谢!
@Francis Fuerte,我的全连接查询如下所示:
SELECT COALESCE(c.ID,a.ID,b.ID) AS ID
,a.COL_A
,b.COL_B
,c.COL_C
FROM @c c
FULL OUTER JOIN @a a ON c.ID=a.ID
FULL OUTER JOIN @b b ON c.ID=b.ID
ORDER BY ID
@Nithesh,如果加入的表的顺序发生变化,结果也会发生变化。
SELECT ISNULL(ISNULL(a.ID,b.ID),c.ID) AS ID
,a.COL_A
,b.COL_B
,c.COL_C
FROM @a a
FULL OUTER JOIN @b b ON a.ID=b.ID
FULL OUTER JOIN @c c ON a.ID=c.ID
ORDER BY ID
SELECT ISNULL(ISNULL(b.ID,a.ID),c.ID) AS ID
,a.COL_A
,b.COL_B
,c.COL_C
FROM @b b
FULL OUTER JOIN @a a ON b.ID=a.ID
FULL OUTER JOIN @c c ON b.ID=c.ID
ORDER BY ID
SELECT ISNULL(ISNULL(c.ID,b.ID),a.ID) AS ID
,a.COL_A
,b.COL_B
,c.COL_C
FROM @c c
FULL OUTER JOIN @b b ON c.ID=b.ID
FULL OUTER JOIN @a a ON c.ID=a.ID
ORDER BY ID
结果:(对不起,没有足够的声誉来发布图片)
+---------------------------+
| ID COL_A COL_B COL_C |
+---------------------------+
| a 2 NULL 1 |
| b NULL 1 NULL |
| c 1 1 NULL |
| d NULL NULL 1 |
+---------------------------+
+---------------------------+
| ID COL_A COL_B COL_C |
+---------------------------+
| a 2 NULL NULL |
| a NULL NULL 1 |
| b NULL 1 NULL |
| c 1 1 NULL |
| d NULL NULL 1 |
+---------------------------+
+---------------------------+
| ID COL_A COL_B COL_C |
+---------------------------+
| a 2 NULL 1 |
| b NULL 1 NULL |
| c NULL 1 NULL |
| c 1 NULL NULL |
| d NULL NULL 1 |
+---------------------------+
我真的需要添加一个带有 GROUPBY 子句的额外层以避免重复吗?