2016-09-15 6 views
0

Ich habe eine Tabelle mit fname | lname | startyear | endYearaber nicht denselben Namen

Nehmen Sie es, dass eine Person mit dem gleichen fname und lname eine einzigartige Person ist. Es können mehrere Einträge mit dem gleichen Dateinamen | lname vorhanden sein.

1) Wie finde ich dieselben Nachnamen von verschiedenen Personen?

ZB 'tom' | 'jerry' | 1990 | 1991 |

'Vlad' | 'Jerry' | 1991 | 1992 |

'tim' | 'Koch' | 1991 | 1992 |

'tim' | 'Koch' | 1992 | 1993 |

Ausgang:

Jerry

2) Welche Personen (Vor- und Nachnamen) serviert zwischen 'Mary' ‚Jane beiden Begriffe?

ZB 'mary' | 'jane' | 1989 | 1990 |

'Tom' | 'Jerry' | 1990 | 1991 |

'Vlad' | 'Jerry' | 1991 | 1992 |

'tim' | 'Koch' | 1991 | 1992 |

'tim' | 'Koch' | 1992 | 1993 |

'mary' | 'jane' | 1993 | 1994

Ausgabe

Tom Jerry

vlad Jerry

tim

+0

Können Sie mit Eingabe und Ausgabe von Beispiel liefern? – Teja

+0

alrite bearbeitet. Bitte werfen Sie einen Blick auf – RStyle

+0

Schließen Sie immer die spezifische Datenbank ein, die Sie verwenden, wenn Sie SQL-Fragen stellen. – sstan

Antwort

1

1) In dieser unter Abfrage kochen, die In der Inline-Ansicht erhalten Sie alle eindeutigen Kombinationen von fname, lname und seiner Verknüpfung mit der ursprünglichen Tabelle auf lname, die Ihnen alle eindeutigen lnames gibt, aber zuerst multiple haben Namen.

SELECT lname 
    FROM table t1 
INNER JOIN 
    (SELECT fname,lname 
     FROM table 
     GROUP BY fname,lname 
     HAVING COUNT(1) = 1 
    ) t2 
ON t1.lname = t2.lname; 

2) In dieser Abfrage die Inline-Ansicht wird das min Jahr und max Jahr der von Mary Jane servierten Bedingungen zurückkehrt und dann sein Kreuz mit der ursprünglichen Tabelle und der Vergleich auf dem startyear und endYear getan was dir alle Namen geben wird, die zwischen Mary Jane gedient haben.

SELECT fname,lname 
    FROM table t1 
    CROSS JOIN 
    (SELECT MIN(startyear) AS minstart,MAX(endyear) AS maxend 
     FROM table 
    WHERE fname = 'Mary' AND lname = 'Jane' 
) t2 
WHERE t1.startyear >= t2.minstart AND t1.endyear <= t2.maxstart; 
+0

Kannst du upvoten, wenn dir die Lösung gefallen hat .... – Teja

Verwandte Themen