2015-07-01 46 views
-1

问题是什么?它说重复的列名称。我可以在不同的表中使用同名的列,并使用表名和。运营商。我正在使用Oracle Database 12c。重复的列名称oracle 12c

CREATE VIEW R1 
AS SELECT * 
FROM Table1 v, Table2 p 
where v.V#=p.V#; 
+5

您可以在不同的表格中使用同名的列,但是如果它们在创建的视图中都存在相同的名称会怎样? –

+1

也可以创建视图r1(c1,c2,c3 ...)作为选择... – jarlh

+1

您还需要了解ANSI-92标准连接语法。在'FROM'子句中用逗号分隔的表是1990年的。 – ninesided

回答

0

此查询将显示在两个表中定义的列的列表。

select column_name from user_tab_columns where table_name = 'TABLE1' 
intersect 
select column_name from user_tab_columns where table_name = 'TABLE2' 

您不能使用select *,但必须明确列出所需的列。 对于这两个表中的列,您必须使用别名进行限定,例如 p.column1

如果您需要两者,您必须重命名

p.column1 as P_COLUMN1, v.column1 as V_COLUMN1 
+0

非常感谢你帮助每个人<3。 虽然我想添加一个评论,从学生的角度来看,新的语法糟透了。他们只是试图成为“可爱”,但这绝不是实际功能。也许我想要做15个连接。我不会写一些带有“=”符号的东西,而会因为这些愚蠢的细节而烦恼。 也许我错了,有一个更简单的方法,我只是在学习。最好的祝福家伙:) – ThePraetor

2

明确列出您正在选择的列。如果您使用SELECT * FROM ...创建视图,那么在视图第一次定义时将设置列并且不会更改 - 即,如果您更改其中一个基础表以添加列,则不会将其添加到视图,除非您重新编译视图。

请勿选择INNER JOIN这两列 - 它不必要,您只需将相同的数据传输给用户两次。

为任何重复的列名提供别名。

CREATE VIEW R1 AS 
SELECT v.COL1, 
     v.COL2, 
     v.COL3, 
     -- Dont need to include p.COL1 as we've got v.COL1 already and they are equal. 
     p.COL2 AS ALTERNATE_COL2, 
     p.COL3 AS ALTERNATE_COL3 
FROM TABLE1 v 
     INNER JOIN 
     TABLE2 p 
     ON (v.COL1 = p.COL1) 

CREATE VIEW R1 (COL1, COL2, COL3, ALTERNATE_COL2, ALTERNATE_COL3) AS 
SELECT v.COL1, 
     v.COL2, 
     v.COL3, 
     -- Dont need to include p.COL1 as we've got v.COL1 already and they are equal. 
     p.COL2, 
     p.COL3 
FROM TABLE1 v 
     INNER JOIN 
     TABLE2 p 
     ON (v.COL1 = p.COL1) 
+0

非常感谢你帮助每个人<3。尽管我想添加一个评论,从学生的角度来看,新的语法很糟糕。他们只是试图成为“可爱”,但这绝不是实际功能。也许我想要做15个连接。我不会写一些带有“=”符号的东西,而会因为这些愚蠢的细节而烦恼。也许我错了,有一种更简单的方法,我只是在学习。最好的祝福家伙:) – ThePraetor

0

您需要使用表的别名明确地键入了列名

CREATE VIEW R1 
AS SELECT v.col1,v.col2,...p.col3,... 
FROM Table1 v, Table2 p 
where v.V#=p.V#; 
0

正如格利扬Chavali评论说,至少有一对列,具有相同名字在两个表中。

要么指定列名列表:

CREATE VIEW R1 (c1, c2, c3...) 
AS SELECT * 
FROM Table1 v 
    JOIN Table2 p ON v.V# = p.V#; 

或者使用列别名:

CREATE VIEW R1 
AS SELECT v.c1 as c1, v.c2 as c2, ... p.c1 as cx, p.c2 as cy ... 
FROM Table1 v 
    JOIN Table2 p ON v.V# = p.V#; 

注意现代明确JOIN语法!

+0

非常感谢你帮助每个人<3。尽管我想添加一个评论,从学生的角度来看,新的语法很糟糕。他们只是试图成为“可爱”,但这绝不是实际功能。也许我想要做15个连接。我不会写一些带有“=”符号的东西,而会因为这些愚蠢的细节而烦恼。也许我错了,有一种更简单的方法,我只是在学习。最好的祝福家伙:) – ThePraetor

+0

新的显式JOIN语法更易于读写(经过一些练习)。如果需要的话,他们更容易转换为OUTER JOIN,这仅仅是足够的理由! – jarlh