重复列名oracle 12c

时间:2015-07-01 11:06:23

标签: sql database oracle

有什么问题?它表示重复的列名称。我被允许在不同的表中使用相同名称的列,并使用表名和。运营商。我正在使用Oracle Database 12c。

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

4 个答案:

答案 0 :(得分: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 )

答案 1 :(得分: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

答案 2 :(得分:0)

您需要使用表别名

明确键入列名称
CREATE VIEW R1
AS SELECT v.col1,v.col2,...p.col3,...
FROM Table1 v, Table2 p
where v.V#=p.V#;

答案 3 :(得分:0)

正如Kalyan Chavali评论的那样,两张表中至少有一对同名的列。

指定列名列表:

$curenttime="2015-06-1 4:35";

或使用列别名:

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

注意现代显式JOIN语法!