2010-09-02 2 views
1

Предположим, у меня есть 2 таблицы. Я хочу присоединиться к ним так, чтобы для каждой учетной записи я получал 1 строку, в которой содержится информация о учетной записи, которая содержит информацию primaryContact, прилагаемую к таблице. Возможно ли это? ID - это уникальные ключи.SQL 2005 - две таблицы Присоединиться к некоторому id,

СЧЕТ ТАБЛИЦА

accountid | name | income | primaryContact 

123456789  Jack Johnson 120,000  Jill Johnson 

КОНТАКТЫ ТАБЛИЦА

parentAccountid |contactid | name | street  | city | state | Country 

123456789   13459284  Jill Johnson 1355 Fir street Yorba   Washington  USA 

РЕЗУЛЬТАТ ТАБЛИЦА

accountid | name | income | primaryContact | street | city | state | country 

123456789  Jack Johnson 120,000  Jill Johnson   1355 Fir street Yorba   Washington  USA 

ответ

2
SELECT a.accountid  , 
     a.name   , 
     a.income  , 
     a.primaryContact, 
     c.street  , 
     c.city   , 
     c.state   , 
     c.country 
FROM account a 
     JOIN contact c 
     ON  a.accountid  = c.parentAccountid 
     AND a.primaryContact = c.name 
+0

Там нет 'столбец CONTACT.primarycontact';) –

+0

Так что, если хотел, чтобы включить эти учетные записи без primaryContact (null), то я делаю левое внешнее соединение? Благодарю. – EKet

+0

@ Ессан - Да. Кстати, вы считали добавление столбца «contactid» для учетной записи, а не для имени. Быть числовым может быть немного быстрее для объединений, также, если люди меняют свое имя (например, жениться), есть меньше, чтобы обновить. –

2

Использование:

SELECT a.accountid, 
      a.name, 
      a.income, 
      a.primaryContact, 
      c.street, 
      c.city, 
      c.state, 
      c.country 
    FROM ACCOUNT a 
LEFT JOIN CONTACT c ON c.parentaccountid = a.accountid 
        AND c.name = a.primarycontact 

Это покажет вам все счета. Если есть первичный контакт, значения будут заполнены - в противном случае ссылки на таблицу CONTACT будут NULL. Если вы не хотите этого, опускаем «ЛЕВЫЙ» из запроса:

SELECT a.accountid, 
      a.name, 
      a.income, 
      a.primaryContact, 
      c.street, 
      c.city, 
      c.state, 
      c.country 
    FROM ACCOUNT a 
    JOIN CONTACT c ON c.parentaccountid = a.accountid 
        AND c.name = a.primarycontact 

See this link for a visual representation of the different JOINs ...

+0

+1 Спасибо за исправление моей ошибки! –

+0

Спасибо! Вы правы, я должен был быть более конкретным. забыл об этих ошибках. – EKet

Смежные вопросы