gpt4 book ai didi

sql - CREATE TABLE 失败 ORA 00957 列名重复

转载 作者:行者123 更新时间:2023-12-01 19:35:00 29 4
gpt4 key购买 nike

当我尝试从 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 failed ORA 00957 Duplicate column name

有人能帮忙吗?

最佳答案

忽略您似乎通过重新键入代码引入的其他错误,您已经表明您确实有一个重复的列,这就是错误告诉您的内容:

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, ...

关于sql - CREATE TABLE 失败 ORA 00957 列名重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33751468/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com