问题是什么?它说重复的列名称。我可以在不同的表中使用同名的列,并使用表名和。运营商。我正在使用Oracle Database 12c。重复的列名称oracle 12c
CREATE VIEW R1
AS SELECT *
FROM Table1 v, Table2 p
where v.V#=p.V#;
问题是什么?它说重复的列名称。我可以在不同的表中使用同名的列,并使用表名和。运营商。我正在使用Oracle Database 12c。重复的列名称oracle 12c
CREATE VIEW R1
AS SELECT *
FROM Table1 v, Table2 p
where v.V#=p.V#;
此查询将显示在两个表中定义的列的列表。
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
非常感谢你帮助每个人<3。 虽然我想添加一个评论,从学生的角度来看,新的语法糟透了。他们只是试图成为“可爱”,但这绝不是实际功能。也许我想要做15个连接。我不会写一些带有“=”符号的东西,而会因为这些愚蠢的细节而烦恼。 也许我错了,有一个更简单的方法,我只是在学习。最好的祝福家伙:) – ThePraetor
明确列出您正在选择的列。如果您使用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)
非常感谢你帮助每个人<3。尽管我想添加一个评论,从学生的角度来看,新的语法很糟糕。他们只是试图成为“可爱”,但这绝不是实际功能。也许我想要做15个连接。我不会写一些带有“=”符号的东西,而会因为这些愚蠢的细节而烦恼。也许我错了,有一种更简单的方法,我只是在学习。最好的祝福家伙:) – ThePraetor
您需要使用表的别名明确地键入了列名
CREATE VIEW R1
AS SELECT v.col1,v.col2,...p.col3,...
FROM Table1 v, Table2 p
where v.V#=p.V#;
正如格利扬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语法!
非常感谢你帮助每个人<3。尽管我想添加一个评论,从学生的角度来看,新的语法很糟糕。他们只是试图成为“可爱”,但这绝不是实际功能。也许我想要做15个连接。我不会写一些带有“=”符号的东西,而会因为这些愚蠢的细节而烦恼。也许我错了,有一种更简单的方法,我只是在学习。最好的祝福家伙:) – ThePraetor
新的显式JOIN语法更易于读写(经过一些练习)。如果需要的话,他们更容易转换为OUTER JOIN,这仅仅是足够的理由! – jarlh
您可以在不同的表格中使用同名的列,但是如果它们在创建的视图中都存在相同的名称会怎样? –
也可以创建视图r1(c1,c2,c3 ...)作为选择... – jarlh
您还需要了解ANSI-92标准连接语法。在'FROM'子句中用逗号分隔的表是1990年的。 – ninesided