【问题标题】:Oracle SQL columns namingOracle SQL 列命名
【发布时间】:2014-12-03 17:15:39
【问题描述】:

我正在使用 Oracle SQL。我有 3 个表,每个表包含 80 个具有相同列名的列。我想将这些表加入到一个新表中,但由于命名重复,我应该会出错。

我不知道如何重命名 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...)。

【问题讨论】:

  • 用明确的 table.column 名称替换通配符并使用别名。
  • t3.id=t3.id 是可疑的。什么是确切的错误消息,因为 oracle 通常不关心重复的列名,它会附加 #s 但是考虑到它通常只是添加下一个数字 t2.c1 变为 t2.c11,但 t1.c11 已经存在......这可能是问题...在这种情况下,如果不重命名列或使用动态 SQL 视图或 cte,我认为如果您仍想执行 select *,那么您就不走运了
  • “t3.id=t3.id”是一个错字。我修好了它。无论如何,我收到“重复的列名错误”。未附加表名前缀。

标签: oracle join multiple-columns naming


【解决方案1】:

类似:

选择T1.c1,T1.c2,T2.c1作为c1_T2,T2.c2作为c2_T2

等等。 应该可以。

编辑: 或者,也许您想将记录合并到一个表中。如果需要区分它们,也许有一个额外的列来描述记录的来源。

【讨论】:

  • 我有 240 列。您的解决方案不适合列数等。
  • 你没有其他机会了。如果您不想手动输入,请在您喜欢的编辑器中使用宏
  • 首先,为什么要连接所有表的所有列?似乎是设计问题。
  • 也许您想将记录合并到表中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2022-11-24
  • 1970-01-01
相关资源
最近更新 更多