1

如何在 Oracle 上使用左连接创建视图?

我可以使用此语句创建连接表

select *
from
    concert_copy c
    left join event_copy e
        on c.concert_id=e.concert_id;

但是当我使用这个语句创建视图时给了我错误

“ORA-00957: 重复的列名”

create view concert_event as
    select *
    from
        concert_copy c
        left join event_copy e
            on c.concert_id=e.concert_id;
4

2 回答 2

8

至少该concert_id列出现在两个表中。SELECT *将导致视图具有 2 个具有相同名称的列。解决方案:至少为其中一个表显式指定字段

create view concert_event as
    select c.*, e.eventname, ...
    from
        concert_copy c
        left join event_copy e
            on c.concert_id = e.concert_id;

如果有其他重复名称,请使用别名。例如,如果两个表都有一列name

select c.*, e.name as eventname, ...

注意:如果您SELECT直接调用,Oracle 会自动为重复的列和表达式创建通用名称,但在视图中,要求所有列名都可以从声明中看到,因为它们与选定列的名称匹配,或者因为给出了别名.

于 2017-12-30T16:30:10.360 回答
2

不要使用星号(即 SELECT *),而是命名您选择的所有列,并为每个列指定独特的名称。例如,如果 CONCERT_COPY 和 EVENT_COPY 都有名为 ID 的列,则您必须

select c.id concert_id, e.id event_id, ...
from concert_copy c left join event_copy e ...
于 2017-12-30T16:28:14.270 回答