如何连接三个表并从三个表和oracle中检索选定的列?

时间:2012-03-10 17:45:01

标签: oracle sqlplus

我有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个结果.. 我想不出怎么做.. 请帮帮我。

6 个答案:

答案 0 :(得分:4)

在您的代码中,您没有加入bookingcustomer,这会导致您的问题。我使用显式连接而不是隐式连接。虽然没有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'

我不完全确定您的预订表的结构。我期待更多的列,例如门票数量等。

答案 1 :(得分:3)

您的WHERE statement并不像您想要的那样具体。 您需要符合booking.cust_id to customer.cust_id的条件:

WHERE booking.c_id = cinema.c_id 
AND booking.cust_id = customer.cust_id
AND location != 'Paris'

现在,您正在为所有客户组合制定结果。

答案 2 :(得分:0)

见下面的例子:

Select   
businessuser.UserName,
businessuser.EmailAddress,
businessimages.ImgName, 
featured_cart.FeaturedPlan,featured_cart.StartDate
From featured_cart
Inner Join businessimages on featured_cart.FeaturedProId = businessimages.IdBusinessImages 
Inner Join businessuser  on businessimages.UserId = businessuser.IdBusinessUser
and featured_cart.FeaturedType = "Featured Email"

3个表是:

  1. businessuser
  2. businessimages
  3. featured_cart
  4. 这个例子正常工作......

答案 3 :(得分:0)

MS SQL Server 2008:

select cust_id, cust_name, location
from customer c 
inner join booking b 
inner join location l
on c.cust_id = b.cust_id and b.c_id=l.c_id

答案 4 :(得分:0)

复合加入加入四个表:

使用了4个表

  1. 客户
  2. 订单
  3. 订单明细
  4. 产品
  5. 此示例100%工作您可以在W3schools中尝试此操作 - 内部加入“尝试自己”SQL编辑器表格取自W3schools编辑器。

    <强> QUERY:

    Select Customers.CustomerName as Table1_Customer, Orders.EmployeeID as Table2_Employee, OrderDetails.Quantity as Table3_OrderDetails,Products.ProductName as Table4_Products 
    From Customers
    INNER JOIN Orders 
    ON Customers.CustomerID = Orders.CustomerID
    INNER JOIN OrderDetails 
    ON Orders.OrderID = OrderDetails.OrderID 
    INNER JOIN Products
    ON OrderDetails.ProductID = Products.ProductID Order by EmployeeID;
    

答案 5 :(得分:0)

你可以使用这样的连接:

<强> SQL

select customer.cust_id,customer.cust_name,cinema.location from cinema,customer,booking where cinema.c_id=booking.c_id and booking.cust_id=customer.cust_id and cinema.location not like 'paris';