3

CustomerAddress(CustomerId, City, Country) と CustomerTransactions(TransactionId, CustomerId, CustomerContact) の 2 つのテーブルがあります。表の値は次のとおりです。

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

単純な結合のように思えますが、上記の結果セットを思い付くのに苦労しています。助けてください。

ありがとう。

4

5 に答える 5

3

私はついにそれを理解しました...

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

私を正しい軌道に乗せてくれてありがとう。

于 2010-06-09T12:40:03.320 に答える
1

これを試してみてください

SELECT *
FROM CustomerAddress ca
INNER JOIN CustomerTransactions ct
    ON ca.CustomerId = ct.CustomerId
GROUP BY ct.CustomerId, ct.CustomerContact
于 2010-06-09T00:00:37.183 に答える
0
select distinct 
   ca.CustomerAddressID
  ,ca.City
  ,ca.Country
  ,ct.CustomerContact
from CustomerAddress ca
left join CustomerTransaction ct on ca.CustomerID = ct.CustomerID

はっきりとあなたはカルメンを二度得ることはありません

于 2010-06-09T09:07:19.563 に答える
0

これは私には左結合のように見えます。

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

そうすれば、すべての住所レコードを取得できます。対応する CustomerTransaction がない場合は、空の文字列を取得する必要があります。

于 2010-06-09T00:05:16.957 に答える
0

WHERE列が null でないことを保証する句を追加するだけです。

于 2010-06-08T23:38:47.050 に答える