2016-06-17 30 views
0

für eine MSQL2012 Instanz Dies istauf Kundentabelle Join Produkthierarchie

Im Moment habe ich ein Problem, eine Client-Datentabelle auf einen hierarcy Beitritt, mein Ziel, eine Ausgabetabelle zu erzeugen ist, das zeigt, was sie nicht besitzen, auf dem erste Ebene.

ich Probleme mit der Client-ID hat, wie wenn Sie die Tabellen vergleichen die Ausgänge überlappen und geben Ausnahmen für alle Client-IDs und nicht für jede Client-ID

Kann mir jemand helfen, die Syntax bei der Erzeugung für diese Art von Problem?

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 

Vielen Dank!

+0

Welche DBMS verwenden Sie? –

+0

MSQL Management Studio 2012 – Bradders

+0

Ihr Tabellenentwurf ist sehr unkonventionell. So müssen Sie diese beiden Tabellen Produkt- und Kundendaten zusammen mit dem Spaltennamen erklären. Sie müssen auch die Ausgabe erklären. – KumarHarsh

Antwort

0

Versuchen Sie, diese

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

Könnten Sie mir bitte mit der Methodik hinterher bitte helfen? Da ich es über ein paar mehr Ebenen implementieren müsste, sonst gibt es mir einige vielversprechende Ergebnisse, danke! – Bradders

+0

erster innerer Join ist, um die Daten zu erhalten, die sich (in beiden Tabellen vorhanden) auf Ebene 1 schneiden. Dies ist ziemlich einfach. Jetzt, wo wir festgelegt haben, welche Datensätze von Produkten und Kunden haben, wo Kunden die Level-1-Artikel haben, ist unser nächster Schritt, die Level-2-Artikel zu überprüfen. Aber hier ist die Ausgabe nicht das, was der Client auf Level 2 hat, aber was der Client nicht hat. Wie bekommen wir, was der Kunde nicht hat, wenn er zwei Sets verbindet? Das ist im Grunde, wo der LINKE JOIN hereinkommt. Er verbindet die Tabelle in der linken Verbindung mit der oben genannten, unabhängig davon, ob die Aufzeichnung existiert oder nicht. – Sam

+0

Wenn in der Tabelle im linken Join ein Datensatz oder eine Joining-Spalte nicht vorhanden ist, wird SQL SERVER einfach den Wert null auf diese Spalte setzen. Daher ist die Überprüfung für Level2 NULL in der WHERE-Bedingung. Ich weiß, dass diese Erklärung etwas verwirrend sein kann, aber hier ist ein Beispiel, wenn Sie ausprobieren und sehen wollen. http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join_left – Sam