Oracle - 如何对视图执行左连接?
Oracle - how to perform left join on views?
如何在 Oracle 上使用左连接创建视图?
我可以使用此语句
创建连接table
select *
from
concert_copy c
left join event_copy e
on c.concert_id=e.concert_id;
但是当我使用此语句创建视图时出现错误
"ORA-00957: duplicate column name"
create view concert_event as
select *
from
concert_copy c
left join event_copy e
on c.concert_id=e.concert_id;
不要使用星号(即 SELECT *),而是为所有列命名 select,为每个列指定独特的名称。例如,如果 CONCERT_COPY 和 EVENT_COPY 都有名为 ID 的列,则您必须
select c.id concert_id, e.id event_id, ...
from concert_copy c left join event_copy e ...
至少 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 会自动为重复的列和表达式创建通用名称,但在视图中要求所有列名称在声明中可见,要么是因为它们与名称匹配所选列的或因为给定了别名。
如何在 Oracle 上使用左连接创建视图?
我可以使用此语句
创建连接tableselect *
from
concert_copy c
left join event_copy e
on c.concert_id=e.concert_id;
但是当我使用此语句创建视图时出现错误
"ORA-00957: duplicate column name"
create view concert_event as
select *
from
concert_copy c
left join event_copy e
on c.concert_id=e.concert_id;
不要使用星号(即 SELECT *),而是为所有列命名 select,为每个列指定独特的名称。例如,如果 CONCERT_COPY 和 EVENT_COPY 都有名为 ID 的列,则您必须
select c.id concert_id, e.id event_id, ...
from concert_copy c left join event_copy e ...
至少 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 会自动为重复的列和表达式创建通用名称,但在视图中要求所有列名称在声明中可见,要么是因为它们与名称匹配所选列的或因为给定了别名。