2010-06-08 5 views
3

У меня есть две таблицы CustomerAddress (CustomerId, City, Country) и CustomerTransactions (TransactionId, CustomerId, CustomerContact). Ниже приведены значения, приведенные в таблицах:не включая пустые значения в sql join

Для CustomerAddress:

1001, El Paso, USA  
1002, Paris, France  
1003, Essen, Germany  

Для CustomerTransactions:

98, 1001, Phillip  
99, 1001, NULL 
100, 1001, NULL  
101, 1003, Carmen  
102, 1003, Carmen  
103, 1003, Lola  
104, 1003, NULL  
105, 1002, NULL 

Я пытаюсь соединить обе таблицы и имеют следующий набор результатов:

1001, El Paso, USA, Phillip  
1002, Paris, France, (empty string)  
1003, Essen, Germany, Carmen  
1003, Essen, Germany, Lola 

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

Спасибо.

+0

Какие данные вам нужно получить от этого соединения, особенно одна строка в адресе клиента может относиться к нескольким строкам в транзакции клиента –

+0

Да, одна строка в таблице customeraddress может относиться к нескольким строкам в таблице транзакций клиента. Мне нужны разные значения для столбца CustomerContact. – Ashanti

+0

без нулевых значений – Ashanti

ответ

0

Просто добавьте предложение WHERE, которое гарантирует, что столбец не равен нулю.

+1

Выполнение этого приведет к устранению второй строки желаемого набора результатов ... – Ashanti

0

Дайте этому идти

SELECT * 
FROM CustomerAddress ca 
INNER JOIN CustomerTransactions ct 
    ON ca.CustomerId = ct.CustomerId 
GROUP BY ct.CustomerId, ct.CustomerContact 
0

Это выглядит как левый присоединиться ко мне.

select ca.CustomerAddressID, ca.City, ca.Country, ISNULL(ct.CustomerContact, '') 
from CustomerAddress ca 
left join CustomerTransaction ct on ca.CustomerID = ct.CustomerID 

Таким образом, вы получите все записи адресов, и если нет соответствующего CustomerTransaction вы должны получить пустую строку.

0
select distinct 
    ca.CustomerAddressID 
    ,ca.City 
    ,ca.Country 
    ,ct.CustomerContact 
from CustomerAddress ca 
left join CustomerTransaction ct on ca.CustomerID = ct.CustomerID 

с отчетливыми вы не получите в два раз Кармен

2

Я наконец понял это ...

SELECT DISTINCT CA.CustomerId, CA.CustomerCity, CA.CustomerCountry, ISNULL(CT.CustomerContact) AS CustomerContact 
FROM CustomerAddress CA 
LEFT JOIN (SELECT CustomerId, CustomerContact 
      FROM CustomerTransactions 
      WHERE CustomerContact IS NOT NULL) CT ON CT.CustomerID = CA.CustomerID 

Спасибо за поставив меня на правильном пути.

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