2012-03-10 1 views
2

У меня есть 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'); 

Я хочу, чтобы выбрать идентификатор клиента (например, 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 результат .. I не могу подумать, как это сделать. , пожалуйста, помогите мне с этим.

ответ

4

В вашем коде вы не присоединяетесь 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' 

Я не совсем уверен в структуре вашей таблицы бронирования. Я хотел бы ожидать еще несколько столбцов, например, количество билетов и т.д.

+0

Я был смущен на нескольких соединений, но теперь его очищено. Спасибо, лот. – user1261319

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' 

, как вы делаете это сейчас, вы Geting результаты для всех комбинаций клиентов.

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

этот пример работает правильно ...

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 
0

Соединение Регистрация Соединение четырех таблиц:

Подержанные 4 Столы

  1. Клиенты
  2. Заказы
  3. Детали_Заказов
  4. Продукты

Этот пример работает 100% Вы можете попробовать это в w3schools - Inner Join «Попробуйте сами» таблицы редактора 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; 
0

HII вы можете использовать присоединиться как это:

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';