当我尝试在oracle中使用特定列名从现有的2表创建新表时。
我试过下面的代码
CREATE TABLE D_T1
AS
SELECT a.col1, a.col2, a.col3, a.col4, a.col5, b.col6, b.col7, b.col8
FROM db1.table1 a INNER JOIN db1.table2 b
ON (a.col1 = b.colNum AND a.col2 = b.colnum1)
但我收到错误
CREATE TABLE失败ORA 00957重复列名
有人可以帮忙吗?
答案 0 :(得分:4)
忽略你似乎通过重新输入代码引入的其他错误,你已经证明你确实有一个重复的列,这就是错误告诉你的:
a.VALIDFLAG, b.VALIDFLAG
您似乎认为表(别名)前缀使投影中的列名称唯一。他们不。表前缀告诉Oracle从哪个表中获取列值(除非您使用的是using
连接语法,否则不是这样)。如果列出现在两个表中,则必须在列名前加上表。如果你想要两个表的值,你必须在它们前面加上前缀。
使用简单查询然后引用两个没有列别名的表列是可以的,但尝试使用结果集的东西可能很难。 This is fine:
select a.dummy, b.dummy
from dual a
join dual b on b.dummy = a.dummy;
DUMMY DUMMY
------- -------
X X
但请注意,两列的标题相同。如果您尝试使用该查询创建表:
create table x as
select a.dummy, b.dummy
from dual a
join dual b on b.dummy = a.dummy;
您会收到错误,ORA-00957:重复的列名。
如果您为重复的列添加了别名,请the problem goes away:
create table x as
select a.dummy as dummy_a, b.dummy as dummy_b
from dual a
join dual b on b.dummy = a.dummy;
因此,在您的情况下,如果您需要两者,您可以为这些列添加别名:
..., a.VALIDFLAG AS validflag_a, b.VALIDFLAG AS validflag_b, ...
答案 1 :(得分:3)
说实话,这个查询很乱。您的SQL语句中有几个错误:
CREATE TABLE AS SELECT
缺少表名 - 这应该是
CREATE TABLE my_new_table AS SELECT
创建一个名为my_new_table的新表。
a.ALIDFLAG,b,VALIDFLAG,
我怀疑这应该是a.VALIDFLAG
而不是a.ALIDFLAG
。此外,您需要将b,VALIDFLAG
替换为b.VALIDFLAG
。
SELECT a.BILLFREQ a.CDHRNUM,
您在a.BILLFREQ
之后缺少逗号 - 这是语法错误。
a.AGNYCOY,a.AGNTCOY
罪魁祸首 - 您选择了两次相同的列。摆脱第二个。
编辑实际上,名称不同,因此这不是错误的原因(除非您在评论中输错了查询而不是复制和粘贴)。
要调试此类错误,请尝试
2ND UPDATE
使用更新的查询,错误在此处:
a.VALIDFLAG,
b,
VALIDFLAG,
你有两个名为VALIDFLAG的列 - 为其中一个使用别名,它应该可以工作。
答案 2 :(得分:1)
ORA-00957:重复的列名
CTAS 语句中出现该错误的唯一原因是您在 SELECT 语句中有类似的列名。虽然您可能会引用不同的表格列,但您没有使用列别名
错误重现:
使用标准EMP
和DEPT
表。
SQL> CREATE TABLE D_T1 AS
2 SELECT a.deptno,
3 b.deptno
4 FROM emp A
5 INNER JOIN dept b
6 ON (a.deptno = b.deptno);
b.deptno
*
ERROR at line 3:
ORA-00957: duplicate column name
解决方法:强>
使用正确的别名:
SQL> CREATE TABLE D_T1 AS
2 SELECT a.deptno e_deptno, --add column alias
3 b.deptno d_deptno --add column alias
4 FROM emp a
5 INNER JOIN dept b
6 ON (a.deptno = b.deptno);
Table created.
答案 3 :(得分:0)
根据OP的新输入进行编辑。
您的查询中存在一些语法错误。纠正了那些。我还检查了重复的列。没有了。现在运行它,让我知道你是否仍然得到相同的错误。
CREATE TABLE D_T1 AS SELECT
a.B, a.C,a.C, a.C, a.C,a.J, a.O,
a.P,a.P,a.S,a.S,a.R,a.B,
a.S,a.S,b.A,b.C,b.C,b.I, b.M,
b.P,b.P,b.S,b.S,b.S,b.Z,b.Z,a.C,
a.CH,a.G,b,V,b.T,a.C,a.C,a.C,
a.A,a.AGa.AG
FROM tbl1 a JOIN tbl2 b
ON (a.C= b.C AND a.C1= b.C1)