Oracle - 如何在视图上执行左连接?

时间:2017-12-30 16:21:03

标签: oracle oracle11g create-view

如何使用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;

2 个答案:

答案 0 :(得分:6)

至少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会自动为重复的列和表达式创建通用名称,但在视图中,要求所有列名称都可以从声明中看到,因为它们与名称相匹配选择列或因为给出了别名。

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