我有3张桌子。
电影院,订票和顾客
create table cinema
(
c_id int,
location varchar(10)
)
insert into cinema values(1,'New York');
insert into cinema values(2,'London');
insert into cinema values(3,'Paris');
create table booking
(
c_id int,
cust_id int
)
insert into booking values(1,10);
insert into booking values(2,11);
insert into booking values(3,12);
insert into booking values(3,13);
insert into booking values(2,14);
create table customer
(
cust_id int,
cust_name varchar(10)
)
insert into customer values(10,'sam');
insert into customer values(11,'adrian');
insert into customer values(12,'mark');
insert into customer values(13,'jim');
insert into customer values(14,'tom');
我想选择尚未在巴黎预订的所有客户的客户ID(即cust_id),客户名称(cust_name)和位置(来自电影院表)。
我想要的是-
cust_id cust_name location
10 sam New York
11 adrian London
14 tom London
我尝试了很多。
我的代码之一是-
SELECT customer.cust_id,customer.cust_name,
cinema.location as Location FROM booking,cinema,customer
WHERE booking.c_id=cinema.c_id AND location!='Paris';
它给了我15结果。
我想不出该怎么做..
请帮我解决一下这个。
最佳答案
在您的代码中,您没有将booking
加入customer
,这会引起您的问题。我在这里使用显式联接,而不是隐式联接。尽管没有difference,但显式语法是标准的。
select cu.cust_id, cu.cust_name, ci.location
from cinema ci
join booking b
on ci.c_id = b.c_id
join customer cu
on b.cust_id = cu.cust_id
where ci.location <> 'Paris'
我不确定您的预订表的结构。我希望有更多列,例如票数等。
关于oracle - 如何联接三个表并从三个表中以及在oracle中检索选定的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9648690/