Как я могу связать две таблицы в SQL, которые связаны через третью?

Мои навыки SQL атрофировались, и мне нужна помощь в подключении двух таблиц через третью, содержащую внешние ключи к этим двум.

В таблице Customer есть нужные мне данные. В таблице Address есть данные, которые мне нужны. Они не связаны напрямую друг с другом, но в таблице CustomerAddress есть столбцы CustomerID и AddressID.

В частности, мне нужно из таблицы Customer:

FirstName
MiddleName
LastName

... и из таблицы адресов:

AddressLine1
AddressLine2
City
StateProvince, 
CountryRegion
PostalCode

Вот моя неуклюжая попытка, синтаксис которой LINQPad даже не распознает ("Неправильный синтаксис рядом с '='").

select C.FirstName, C.MiddleName, C.LastName, A.AddressLine1, A.AddressLine2, A.City, A.StateProvince, 
A.CountryRegion, A.PostalCode
from SalesLT.Customer C, SalesLT.Address A, SalesLT.CustomerAddress U
left join U.CustomerID = C.CustomerID
where A.AddressID = U.AddressID

Примечание. Это таблица SQL Server, а именно AdventureWorksLT2012_Data.mdf.


person B. Clay Shannon    schedule 23.01.2014    source источник


Ответы (2)


select C.FirstName, C.MiddleName, C.LastName, A.AddressLine1, A.AddressLine2, A.City, A.StateProvince, 
A.CountryRegion, A.PostalCode
from  SalesLT.CustomerAddress U INNER JOIN SalesLT.Address A
ON A.AddressID = U.AddressID
INNER JOIN  SalesLT.Customer C
ON U.CustomerID = C.CustomerID  

Я использовал только INNER JOINS, но, очевидно, вы можете заменить их соединениями LEFT или RIGHT в зависимости от ваших требований.

person M.Ali    schedule 23.01.2014
comment
Думайте об этом как о построении цепочки. Начните с одной таблицы, которая является главной, а затем начните подключать таблицы по одной. - person Bill; 23.01.2014

LEFT JOIN будет включать клиентов, у которых нет адреса.

    SELECT C.FirstName, C.MiddleName, C.LastName, A.AddressLine1, 
    A.AddressLine2, A.City, A.StateProvince, 
    A.CountryRegion, A.PostalCode
    FROM  Customer C
    LEFT JOIN CustomerAddress U 
    ON U.CustomerID = C.CustomerID  
    LEFT JOIN Address A
    ON A.AddressID = U.AddressID
    ORDER BY C.LastName, C.FirstName
person JBrooks    schedule 23.01.2014