2010-03-23 1 views
0

Запись таблицы местоположений имеет два идентификатора адреса - адрес электронной почты и бизнес-адрес, которые относятся к таблице адресов.TSQL - Как присоединиться к 1 .. * из нескольких таблиц в одном наборе результатов?

Таким образом, таблица адресов будет содержать до двух записей для данного идентификатора адреса.

Учитывая местоположение ID, мне нужно sproc вернуть все поля tbl_Location, и все tbl_Address поля в одном результирующем:

  LocationID INT, 
      ClientID INT, 
      LocationName NVARCHAR(50), 
      LocationDescription NVARCHAR(50), 
      MailingAddressID INT, 
      BillingAddressID INT, 
      MAddress1 NVARCHAR(255), 
      MAddress2 NVARCHAR(255), 
      MCity NVARCHAR(50), 
      MState NVARCHAR(50), 
      MZip NVARCHAR(10), 
      MCountry CHAR(3), 
      BAddress1 NVARCHAR(255), 
      BAddress2 NVARCHAR(255), 
      BCity NVARCHAR(50), 
      BState NVARCHAR(50), 
      BZip NVARCHAR(10), 
      BCountry CHAR(3) 

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

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

У меня уже есть табличная функция, которая принимает идентификатор адреса и возвращает все поля для этого идентификатора, но не знает, как интегрировать его в мой требуемый результат.

Сверху, это выглядит как 3 выбирает для создания этой таблицы - 1: Расположение, 2: Почтовый адрес, 3: Адрес фактуры.

Что бы я хотел сделать, это просто создать представление и использовать его.

Любая помощь была бы полезной.

Спасибо.

ответ

0

Если я правильно понимаю ваш вопрос вы хотите что-то вроде:

SELECT 
    L.*, 
    MAddress1 = M.Address1, 
    MAddress2 = M.Address2, 
    MCity = M.City, 
    MState = M.State, 
    MZip = M.Zip, 
    MCountry = M.Country 
    BAddress1 = B.Address1, 
    BAddress2 = B.Address2, 
    BCity = B.City, 
    BState = B.State, 
    BZip = B.Zip, 
    BCountry = B.Country 
FROM 
    tbl_Location L 
    INNER JOIN tbl_Address M 
     ON L.MailingAddressID = M.MailingAddressID 
    INNER JOIN tbl_Address B 
     ON L.BillingAddressID = B.BillingAddressID 
WHERE 
    L.LocationID = @LocationID 
+0

Спасибо Крису и Тлибе. Я пошел с ответом Тлибе, так как мне не нужно было делать все AS. Оба работают просто отлично, и намного проще, чем мое чрезмерное решение :). – ElHaix

4

что-то вдоль линий следующих будет работать:

select L.*, 
a1.Address1 as MAddress1, a1.Address2 as MAddress2, 
a2.Address1 as BAddress1, a2.Address2 as BAddress2 
from location L 
    inner join Address a1 on (a1.AddressId = L.MailingAddressId) 
    inner join Address a2 on (a2.AddressId = L.BillingAddressId) 

Я не ставил во всех областях, но вы получите идею.

Обратите внимание, что если любая из идентификаторов адресов может быть нулевой, вместо этого вы можете использовать левое соединение.

+0

+1 измените 'внутренние join's к' левой joins' если location.MailingAddressId или BillingAddressId являются обнуляемым. –