我有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/

10-09 17:13