2017-01-24 11 views
0

私はすべてのテーブルで同じになるフィールドに参加しようとしている3つのテーブルがありますが、テーブルは関連性がありません。これらのテーブルは、リレーショナルに関連していないのでこのシナリオで結合後にレコードが重複しないようにする方法はありますか?

TableA : 
Account_Number | merchant_name | sale_date 
123456789  | merchant 1 | 04-22-2016 
123456789  | merchant 2 | 03-25-2016 
123456789  | merchant 3 | 02-26-2016 

TableB : 
Account_Number | authorization_date | authorization_amount 
123456789  | 04-22-2016   | 23 
123456789  | 03-5-2016   | 55 

TableC : 
Account_Number 
123456789 

、彼らは唯一の各テーブルに持っている可能性が類似した列の値を持って、私は、1本の出力が今まで受けて6つのレコードを示すとは異なる可能性がどのように混乱していますテーブル内の各レコードについて、各テーブルの各値に対して一意のレコードを与えることになります。

各テーブルにnull値を示す応答を表示したい場合、これは可能ですか?私が外側をテーブルに結合すると、存在しないフィールドのnull値が表示されるはずですが、これは機能していないようです。

おそらく、私は外側の結合がどのように動作するのか混乱していますが、すべてのレコードがすべてのテーブルから返されることは理解していましたが、存在しないフィールドに対してはNULLが返されます。以下は、私が持っているクエリとレスポンスです。これは6レコード合計を示していますが、正確ですが、レコードには他のテーブルデータが追加されています。

問合せ:

SELECT A.merchant_Name, A.sale_date, B.authorization_date, B.authorization_amount, C.account_number 
FROM (TableA AS A 
LEFT OUTER JOIN TableB AS B ON A.[account_number] = B.[account_number]) 
LEFT OUTER JOIN TableC AS C ON A.[account_number] = C.[account_number] 
WHERE (((A.account_number)='123456789')) 
ORDER BY A.sale_date, B.authorization_date; 

出力:

merchant_Name|sale_date|authorization_date|authorization_amount|acct 
    merchant 3 02-26-2016 03-05-2016    55   123456789 
    merchant 3 02-26-2016 04-22-2016    23   123456789 
    merchant 2 03-25-2016 03-05-2016    55   123456789 
    merchant 2 03-25-2016 04-22-2016    23   123456789 
    merchant 1 04-22-2016 03-05-2016    55   123456789 
    merchant 1 04-22-2016 04-22-2016    23   123456789 

必要は値がACCOUNT_NUMBERに基づいて存在している場合、すべての3つのフィールドの応答を持つことです。以下のようなものがありますか?口座番号にあり参加し、それぞれのテーブルが一致するレコードを持っているので、あなたがOUTERを使用して、このクエリを使用して任意のNULL値を取得することはありません

merchant_name | sale_date | authorization_date | authorization_amount | acct 
merchant 3 | 02-26-2016|  null   |  null   | null 
merchant 2 | 03-25-2016|  null   |  null   | null 
merchant 1 | 04-22-2016|  null   |  null   | null 
    null  | null  |  03-05-2016  |  55    | null 
    null  | null  |  04-22-2016  |  23    | null     
    null  | null  |  null   |  null   | 123456789 

答えて

1

が加わります。

UNION ALLクエリを使用すると、必要な結果を得ることができます.Union ALLクエリは、別々のクエリの結果を取得し、順番にそれらを追加します。

SELECT A.merchant_Name, A.sale_date, NULL AS authorization_date, 
NULL AS authorization_amount, NULL AS acct 
FROM tableA A 
WHERE A.account_number = '123456789' 
UNION ALL 
SELECT NULL, NULL, b.authorization_date, b.authorization_amount, NULL 
FROM tableB B 
WHERE B.account_number = '123456789' 
UNION ALL 
SELECT NULL NULL, NULL, NULL, C.account_number 
FROM tableC C 
WHERE C.account_number = '123456789'; 

この文字列で検索してください

関連する問題