2013-07-21 67 views
1

我一直从下面的输入中收到跟随错误“列不明确定义”。我正在使用Oracle SQL Developer。如何在Oracle中连接多个表

我目前在学校,这是我的一项任务。有了这个说法,我很没经验,很可能需要一个“孩子般”的解释。作业指出:“创建一个视图列出所有可供租借的电影,视图应该包括标题,类别描述(不是category_code),公司,导演,演员,商店,副本,类型。”我想我可能会加入太多桌子?!?或者,显然,只是没有正确地做。任何援助将非常感激。

create view AvailableMovies as 
select m.title, mcat.description, comp.company_name, d.director_name, 
act.actor_name, mrs.store_name, mrl.available_for_rent, mrl.type_distributed 
from companies comp 
join directors d 
on comp.company_id = d.company_id 
join movie_directors mdir 
on d.director_id = mdir.director_id 
join actor_in_movies aim 
on mdir.movie_id = aim.movie_id 
join actors act 
on aim.actor_id = act.actor_id 
join actor_in_movies aim 
on act.actor_id = aim.actor_id 
join order_items oi 
on aim.movie_id = oi.movie_id 
join orders o 
on oi.order_id = o.order_id 
join movie_rental_stores mrs 
on o.store_id = mrs.store_id 
join movie_rent_list mrl 
on mrs.store_id = mrl.store_id 
join movies m 
on mrl.movie_id = m.movie_id 
join movie_categories mcat 
on m.category_code = mcat.category_code 
order by m.title; 

如果这会有所帮助,下面都是从我的赋值表:

create table companies(
company_id   number(3), 
company_name   varchar2(30) not null, 
description   varchar2(100) 
); 

create table movie_categories(
category_code   char(3) not null, 
description   varchar2(50) 
); 

create table movies (
movie_id    number(5), 
title     varchar2(30) not null, 
category_code   char(3) not null, 
description   varchar2(500), 
released_by   number(3) not null, 
released_on   date not null 
); 

create table directors(
director_id  number(5), 
director_name    varchar2(30) not null, 
company_id  number(3) not null 
); 

create table movie_directors(
movie_director_id  number(5), 
movie_id    number(5) not null, 
director_id   number(5) not null 
); 

create table awards(
award_id    number(4), 
award     varchar2(30) not null, 
award_description  varchar2(100) 
); 

create table movie_awards(
movie_award_id  number(5), 
movie_id    number(5) not null, 
award_id    number(4) not null, 
award_date   date 
); 

create table actors(
actor_id   number(5), 
actor_name   varchar2(30) not null, 
gender    char(1), 
contact    varchar2(20) 
); 

create table actor_in_movies(
movie_actor_id number(5), 
movie_id   number(5) not null, 
actor_id   number(5) not null 
); 

create table movie_distributors(
distributor_id  number(3), 
distributor_name varchar2(30) not null, 
location   varchar2(40), 
contact    varchar2(40) 
); 

create table distributed_movie_list(
distribution_id   number(8), 
movie_id     number(5) not null, 
distributor_id   number(3) not null, 
distribute_type   varchar2(10), 
inventory_quantity  number(3) default 0, 
unit_price    number(8,2) 
); 

create table movie_rental_stores(
store_id    number(4), 
store_name    varchar2(30) not null, 
store_location   varchar2(50) 
); 

create table orders(
order_id    number(8), 
store_id    number(4) not null, 
description    varchar2(30), 
total_items    number(3), 
total_payment   number(8,2), 
tax      number(6,2), 
order_status   varchar2(2), 
ordering_date   date, 
order_completed_date date 
); 

create table order_items(
item_id     number(10), 
order_id     number(8) not null, 
distribution_id   number(8) not null, 
movie_id     number(5) not null, 
number_of_items   number(3), 
item_unit_price   number(5,2), 
item_sub_total   number(10,2) 
); 


create table movie_rent_list(
title_id      number(5), 
movie_id      number(5) not null, 
store_id      number(4) not null, 
number_in_store    number(2), 
available_for_rent   char(1), 
rent_unit_price    number(5,2), 
type_distributed    varchar2(10),   
overdue_unit_fee    number(5,2) 
); 

create table movie_copies(
copy_id    number(5), 
title_id    number(5) not null, 
available    char(1) default 'Y' 
); 

create table customers(
customer_id    number(5), 
store_id    number(4) not null, 
firstname    varchar2(20), 
lastname    varchar2(20), 
gender     char(1), 
address     varchar2(50), 
card_approved   char(1), 
card_approved_date  date, 
phone_number   varchar2(10), 
card_number    number(10), 
rent_limit    number(2), 
overdue_notified  char(1) 
); 

create table movie_rent_records(
rent_record_id   number(8), 
customer_id    number(5) not null, 
copy_id     number(5) not null, 
rented_date    date, 
returned_date   date, 
rent_fee    number(5,2), 
overdue_fee    number(5,2), 
overdue_days   number(2) 
); 

回答

5

你需要修复的视图。

别名aim正在使用两次。据推测这是造成这个问题。

+0

@ Gordon,WOW !!!我为此工作了好几天。我不知道这是造成这个问题。我改变了瞄准目标2的第二个目标,现在它运作完美。谢谢!!! –

1

错误表示查询的投影具有可能来自多个表的列。你一直非常谨慎地在你的表中使用别名,并在列引用中使用别名。但是,可惜你在FROM子句中包含了两次actor_in_movies,并且每次都使用相同的别名aim

因此错误:数据库不知道在连接中使用哪个实例actor_in_movies

这看起来像是一个cut'n'paste错误给我。

+0

@ APC,是的,这是错误。我认为别名只与子查询有关。轻松修复后,视图被完美创建。谢谢您的帮助! –