2016-11-02 4 views
3

Ich habe zwei Tabellen auf SQL-Server. Eine enthält Clients und eine eine Clientprofil-Suchtabelle. So ein bisschen wie folgt (beachten Sie, dass Fred hat keine Werte in der Lookup-Tabelle):Links Join Tabelle mit Werten in Lookup-Tabelle

Table: Clients   Table: Profile 
ID | Name | Status   ClientID | Type | Value 
-----------------------  ----------------------- 
1 | John | Current     1 | x  | 1 
2 | Peter | Past      1 | y  | 2 
3 | Fred | Current     2 | x  | 3 
             2 | y  | 4 

ich dann versuche, eine tmp-Tabelle zu erstellen, die alle aktuellen Kunden wie diese enthalten muss:

ID | Name | TypeY 
================== 
1 | John | 2 
3 | Fred | 

Meine Kenntnisse von SQL ist begrenzt, aber ich denke, ich sollte diese Join mit einem Links der Lage zu tun, so habe ich versucht, diese (#tmpClient ist bereits erstellt):

insert into #tmpClient 
    select a.ID, a.Name, b.Value 
    from Clients a 
    left join Profile b 
    on a.ID = b.ClientID 
    where a.Status = 'Current' and b.Type = 'y' 

dies wird jedoch immer vermissen Fred aus dem Tempora Ry Tisch. Ich mache wahrscheinlich etwas sehr einfaches falsch, aber wie ich sagte, fehlen mir die SQL-Fähigkeiten, um dieses eine heraus zu arbeiten. Bitte kann mir jemand helfen, diese Anfrage richtig zu stellen.

Antwort

2

Sie müssen das Prädikat bewegen bezüglich der zweiten Tabelle des LEFT JOIN Betrieb WHERE-ON Klausel:

insert into #tmpClient 
    select a.ID, a.Name, b.Value 
    from Clients a 
    left join Profile b 
    on a.ID = b.ClientID and b.Type = 'y' 
    where a.Status = 'Current' 
+0

versucht, genau das, und es gibt mir die gleichen Ergebnisse. Immer noch kein Fred. Ich denke, es hat damit zu tun, dass er nicht in der Profiltabelle auftaucht und daher gibt es für seine ClientID kein b.Type = 'y'. – Kees

+0

@Kees Dies sollte kein Problem sein, da das 'b.Type = 'y''-Prädikat in der' ON'-Klausel erscheint. –

+0

Endlich hat alles geklappt. Die Abfrage fügt die richtigen Ergebnisse in der temporären Tabelle ein, der nachfolgende Code verarbeitet sie jedoch nicht ordnungsgemäß. Ich habe den ganzen Nachmittag nach einem nicht existierenden Fehler gejagt. Vielen Dank für deine Hilfe. – Kees