2014-12-03 67 views
0

我正在使用Oracle SQL。我有3个表,其中包括每个80列具有相同的列名称。我想将表格加入到一个新表格中,但由于命名重复,我应该得到一个错误。Oracle SQL列命名

我不要重命名240列。还有其他解决方案吗?

这里是我的表:

T1

c1 int, 
c2 int, 
.. 
.. 
.. 
c80 int 

T2

c1 int, 
c2 int, 
.. 
.. 
.. 
c80 int 

T3

c1 int, 
c2 int, 
.. 
.. 
.. 
c80 int 

这里是我的加盟:

Create table NewTable as 
select * 
from T1 
    inner join T2 
     on T1.id = T2.id 
    inner join T3 
     on T1.id = T3.id 

是否有诸如问题的任何解决方案?例如 - 显示包含表名称(t1.c1,t1.c2 ...)的完整列名称。

+0

用明确的table.column名称替换通配符并使用别名。 – OldProgrammer 2014-12-03 17:23:10

+0

t3.id = t3.id是可疑的。由于oracle通常并不关心重复的列名称,所以它会追加#s,但是通常会添加下一个数字t2.c1变成t2.c11,但t1.c11已经存在......可能是问题......在没有重命名列或使用动态SQL视图或cte的情况下,如果您仍想执行select * – xQbert 2014-12-03 17:23:47

+0

,我认为您运气不佳。“t3.id = t3.id”是一个错字。我修好了它。无论如何,我收到“重复列名错误”。表名前缀未被追加。 – Omri 2014-12-03 17:26:57

回答

0

类似:

选择T1.c1的,T1.c2,T2.C1为C1_T2,T2.c2作为c2_T2

等 应该工作。

编辑: 或者,也许你想联合记录到一个表。如果需要区分它们,可能会有一个额外的列描述记录的来源。

+0

我有240列。您的解决方案不适合诸如列数量。 – Omri 2014-12-03 17:25:41

+3

你没有任何其他机会。如果您不想输入的是手动输入 – ibre5041 2014-12-03 17:37:41

+0

,请在您最喜欢的编辑器中使用宏首先,您为什么要加入所有表格的所有列?似乎是一个设计问题。 – 2014-12-03 17:52:48