2012-04-05 9 views
3

Ich habe eine Tabelle wie dieseSQL Server-Abfrage-Mutter Namen des Kindes zu finden

ID Name Mother Father 
1 Sue  NULL NULL 
2 Ed  NULL NULL 
3 Emma 1  2 
4 Jack 1  2 
5 Jane NULL NULL 
6 Bonnie 5  4 
7 Bill 5  4 

und ich brauche Ausgang wie unten

ID Name Mother Father 
3 Emma sue  ed 
4 jack sue  ed 
6 bonnie jane jack 
7 bill jane jack 

Ich habe versucht Abfrage Schreiben mit n CTE beitreten, aber könnte nicht kommen up mit der Logik, kann mir bitte jemand aus

Antwort

4
SELECT t.ID, t.Name, m.Name, f.Name 
FROM your_table t 
INNER JOIN your_table m ON m.ID = t.Mother 
INNER JOIN your_table f ON f.ID = t.Father 

Verwenden LEFT JOIN wenn Sie recor einschließen möchten helfen ds ohne Mother und/oder Father Knoten:

SELECT t.ID, t.Name, ISNULL(m.Name, 'Orphan') Mother, ISNULL(f.Name, 'Orphan') Father 
FROM your_table t 
LEFT JOIN your_table m ON m.ID = t.Mother 
LEFT JOIN your_table f ON f.ID = t.Father 
+0

vielen Dank David. .es funktionierte !!! – LOL

0

versuchen, etwas wie folgt aus:

select 
    p.id, p.name, p1.name as mother, p2.name as father 
from people p 
inner join people p1 on p1.id = p.mother 
inner join people p2 on p2.id = p.father 
-2

Auswahlabfrage

SELECT A.*  
FROM tbl A 
    ,tbl M  
    ,tbl F  
WHERE A.Mother = M.ID  
    AND A.Father = F.ID  

ohne innere Verknüpfung ..

+0

Dies ist immer noch ein INNERES JOIN – Taryn

+0

ich bedeutet zu sagen, ohne Inner join Schlüsselwort ... –