2010-01-20 3 views
5

Хах ребята, я в до сих пор используется присоединиться с двумя столами, но теперь я хочу присоединиться три таблицы, что показано на рисунке рисприсоединиться три таблицы в SQL Server 2005

alt text http://i.msdn.microsoft.com/ms152507.75c9e4c3-260d-4b8d-8a27-b720d8f4470e%28en-US,SQL.90%29.gif

Я пробовал соединить две таблицы,

SELECT O.OrderID,O.CustID,O.OrderTotal,C.Name from Orders 
as O inner join Customers as C on O.CustID=C.CustID 

, как присоединиться к третьей таблице с этим .... Любое предложение ...

+0

Что вы хотите выбрать из таблиц? –

+0

@ индивидуальные клиенты заказать детали –

+0

aah ... вы нарушаете нормализацию базы данных до земли :) (на 'OrderTotal' в' Orders') –

ответ

11

Вы сделать то же самое, с третья таблица:

SELECT O.OrderID,O.CustID,O.OrderTotal,C.Name, OC.OrderAmount 
FROM Orders as O 
INNER JOIN Customers as C 
    ON O.CustID=C.CustID 
INNER JOIN OrderItems as OC 
    ON O.OrderID=OC.OrderID 
3

Вы можете просто добавить еще один JOIN до конца:

inner join OrderItems as OI ON O.OrderID= OI.OrderID 

Примечания, что информация порядка верхнего уровня (идентификатор заказа, идентификатор клиента, порядок полного и имя клиента) будет возвращен для КАЖДОГО элемента заказа в заказе. Итак, в зависимости от сценария вы можете сначала получить данные верхнего уровня, а затем вернуть все детали элемента заказа отдельно, чтобы сохранить возвращаемое количество повторяющихся данных. Зависит от ситуации, но подумал, что стоит упомянуть.

+0

@Dev спасибо за ур комментарии будут работать на этом .. –

3
Select Customers.Name 
    From OrderItems       --  (Table 1) 
    INNER JOIN Orders       --  (Table 2) 
    ON OrderItems.OrderID = Orders.OrderID 
    INNER JOIN Customers      --  (Table 3) 
    ON Orders.CustID = Customers.CustID 
    Where Customers.CustID = 2     --  This will give you the name of the second customer in the third table using JOINS 
Смежные вопросы