有什么问题?它表示重复的列名称。我被允许在不同的表中使用相同名称的列,并使用表名和。运营商。我正在使用Oracle Database 12c。
CREATE VIEW R1
AS SELECT *
FROM Table1 v, Table2 p
where v.V#=p.V#;
答案 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语法!