не включая нулевые значения в соединении sql - PullRequest
3 голосов
/ 09 июня 2010

У меня есть две таблицы CustomerAddress (CustomerId, City, Country) и CustomerTransactions (TransactionId, CustomerId, CustomerContact). Вот значения в таблицах:

Для CustomerAddress:

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

Для операций клиента:

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

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

Спасибо.

Ответы [ 5 ]

2 голосов
/ 09 июня 2010

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

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

Спасибо, что поставили меня на правильный путь.

1 голос
/ 09 июня 2010

Попробуй

SELECT *
FROM CustomerAddress ca
INNER JOIN CustomerTransactions ct
    ON ca.CustomerId = ct.CustomerId
GROUP BY ct.CustomerId, ct.CustomerContact
0 голосов
/ 09 июня 2010
select distinct 
   ca.CustomerAddressID
  ,ca.City
  ,ca.Country
  ,ct.CustomerContact
from CustomerAddress ca
left join CustomerTransaction ct on ca.CustomerID = ct.CustomerID

с отличным ты не получишь кармен дважды

0 голосов
/ 09 июня 2010

Это похоже на левое соединение со мной.

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

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

0 голосов
/ 09 июня 2010

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

...