【发布时间】:2014-05-27 23:14:20
【问题描述】:
我认为我之前尝试过以另一种形式 here 提出过我想要实现的目标。但是我有一个稍微不同的要求,并且对我能做什么有更多的限制。
在这个简化的场景中:
CREATE TABLE backup_data AS SELECT a.*, b.*, c.*
FROM tbl_a a, tbl_b b, tbl_c c
WHERE a.aid = b.bid
AND b.cid = c.cid;
tbl_a、tbl_b 和 tbl_c 有一些列同名,当我尝试运行时,Oracle 将返回列名重复错误。
我希望有某种方法可以区分列名,以便尽管名称相同,我也可以插入它们。
我认为这可能通过连接别名来实现,例如:
CREATE TABLE backup_data AS SELECT a.* 'tbl_a_' || COLUMN_NAME, b.* 'tbl_b_' || COLUMN_NAME, c.* 'tbl_c_' || COLUMN_NAME
FROM tbl_a a, tbl_b b, tbl_c c
WHERE a.aid = b.bid
AND b.cid = c.cid;
恐怕我已经知道唯一的解决方案是:
- 收拾一下,用适当的别名手工写出 617 个列名,或者
- 使用一些很棒的 PLSQL
不幸的是,在这个特定的例子中我没有 PLSQL 的奢侈,我也没有时间手工完成。
有没有其他方法可以实现这个创建为具有重复列名的选择?
【问题讨论】:
-
同名的列是你加入的列吗?或者是否有不属于连接的其他列具有相同的名称?通常,
SELECT语句可以愉快地返回多个具有相同名称的列,Oracle 可以为第二列隐式提供适当的别名。我假设对唯一别名的要求来自您对select的结果所做的任何事情。您显示的insert as select不是有效的 SQL 语法 - 也许您真的在做CREATE TABLE AS SELECT? -
对不起,你是对的我正在尝试创建为选择...我已经重构了 OP。按照我提到的方式,有没有更好的方法来做到这一点?
-
同名的列是你加入的列吗?或者是否存在不属于连接但名称相同的其他列?
-
是的,有同名的连接列,也有大量的非连接重名。
标签: sql oracle duplicates alias columnname