2016-06-17 14 views
0

を製品階層に参加し、私の目的は、彼らが上で所有していないかを示して出力テーブルを生成することです最初のレベル。私は現在hierarcyにクライアントデータテーブルに参加する問題を持っている。これは、MSQL2012例えば</p> <p>ある顧客テーブルに

私は

あなたは出力が重なったテーブルを比較し、すべてのクライアントIDのための例外を与える場合などではなく、各クライアントIDのために、クライアントIDに問題を抱えている誰でものための構文を生成する際に私を助けてもらえこのタイプの問題?

product_data 
    Level 1, Level 1 Name, Level 2, Level 2 Name 
     1   Fruit   2  Apple 
     1   Fruit   3  Banana 
     1   Fruit   4  Orange 
     5   Vegetable  6  Potato 
     5   Vegetable  7  Celery 

client data 
    Client ID, Level 1, Level 1 Name, Level 2, Level 2 Name 
     1  1   Fruit   2  Apple 
     1  1   Fruit   3  Banana 
     2  5   Vegetable  5  Potato 
     2  1   Fruit   4  Orange 

Desired Output 
    Client ID, Level 1, Level 1 Name, Level 2, Level 2 Name 
     1   1  Fruit   4  Orange 
     2   1  Fruit   2  Apple 
     2   1  Fruit   3  Banana 
     2   5  Vegetable  7  Celery 

ありがとうございます!

+0

を試してみてください? –

+0

MSQL Management Studio 2012 – Bradders

+0

あなたのテーブルデザインは非常に慣習的ではありません。そのため、2つのテーブルの製品とクライアントデータを列名と共に説明する必要があります。出力についても説明する必要があります。 – KumarHarsh

答えて

0

は、DBMSは、使用している。この

SELECT cln1.ClientID, cln1.Level1, cln1.Level1Name, prd.Level2, prd.Level2Name 
FROM product_data prd 
INNER JOIN client_data cln1 
    ON prd.Level1 = cln1.Level1 
LEFT JOIN client_data cln2 
    ON cln1.ClientId = cln2.ClientId 
    AND prd.Level1 = cln2.Level1 
    AND prd.Level2 = cln2.Level2 
WHERE cln2.Level2 IS NULL 
+0

これの背後にある方法論で私を助けてくれるでしょうか? 私はいくつかのレベルを超えてそれを実装する必要があるので、そうでなければ、それは私にいくつかの有望な結果を与える、ありがとう! – Bradders

+0

最初の内部結合は、レベル1で交差する(両方のテーブルに存在する)データを取得することです。これはかなり簡単です。これで、顧客がレベル1のアイテムを持つ製品とクライアントのレコードを持つセットを作成しました。次に、レベル2のアイテムをチェックします。 ただし、出力はクライアントがレベル2で持っているものではなく、クライアントにはないものです。では、クライアントが2つのセットに参加することによって得られないものをどのように得るのでしょうか?これは基本的にLEFT JOINが来るところです。レコードが存在するかどうかにかかわらず、上記のセットと左結合のテーブルを結合します。 – Sam

+0

レコードまたは結合列が左側の結合のテーブルに存在しない場合、SQL SERVERは単にその列に値nullを設定します。したがって、WHERE条件でLevel2 IS NULLのチェックが行われます。 私はこの説明がちょっと混乱しているかもしれませんが、試して見たい場合の例があります。 http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join_left – Sam

関連する問題