Oracle SQL:我可以将来自不同表的列合并到一个表中吗?

时间:2015-05-29 18:13:53

标签: sql oracle

我想知道我是否可以将来自不同表格的列组合成一个结果。

Table A:
ID ColA ColB
1   A    B

Table B:
ID ColC ColD ColE
1   C1   D1   E1
1   C2   D2   E2

Table C:
ID ColF ColG 
1   F    G   

预期结果:

ID ColA ColB ColC ColD ColE ColF ColG
1   A    B    C1   D1   E1   F    G
1             C2   D2   E2

有没有办法将不同表中的列合并为一个?

提前谢谢。

3 个答案:

答案 0 :(得分:0)

您可以使用Full Outer Join加入他们。这可以使用ID列完成,也可以通过公开每行的rownum值来完成。

根据您的预期结果,您似乎确实需要ID才是唯一的。您需要更改表B以在ID列中具有唯一值。

...
Table B:
ID ColC ColD ColE
1   C1   D1   E1
2   C2   D2   E2 //ID COLUMN VALUE CHANGED FROM 1 to 2 to be unique
...

如果ID是唯一的,您可以使用ID执行完全外部联接:

select a.*,b.*,c.*
from a 
full outer join b on a.ID = b.ID
full outer join c on c.ID = b.ID

否则,您可以使用rownum执行完全外部联接:

select a.*,b.*,c.*
from (select t.*,rownum as RowNumber from a) a
full outer join (select t.*,rownum as RowNumber from b) b on a.RowNumber = b.RowNumber
full outer join (select t.*,rownum as RowNumber from c) c on c.RowNumber = b.RowNumber

答案 1 :(得分:0)

select ID AS "ID", ColA AS "ColA", ColB AS "ColB",NULL AS ColC ,NULL AS ColD ,NULL AS ColE, NULL AS ColF, NULL AS ColG FROM Table A
UNION
SELECT ID AS "ID", NULL AS "ColA", NULL AS "ColB",ColC AS "ColC" ,ColD AS "ColD" ,ColE AS "ColE", NULL AS ColF, NULL AS ColG FROM Table B
UNION
SELECT ID AS "ID", NULL AS "ColA", NULL AS "ColB",NULL AS "ColC" ,NULL AS "ColD" ,NULL AS "ColE", ColF AS "ColF", ColG AS "ColG" FROM Table C

希望这是你的预期

答案 2 :(得分:0)

我'简单'的解决方案是<div data-ng-init='stats=${stats}'> <li data-ng-repeat="stat in stats.Types">{{stat.name}}</li> </div> 但是,它不会给你第二行的空白(因为TableA只包含1行)。

因此,要解决这个问题,您可以使其更加复杂,并为每个表生成每个ID的数字。然后,您可以在每个子选择上进行完全外部连接,并将生成的行号用作连接中的第二个字段。这样,您就不会得到笛卡尔积,并且在绘制时会得到结果,缺少行的间隙。

我手边没有数据库来测试它,但请告诉我它是否有效。

full outer join