2016-09-15 107 views
0

我有FNAME表| L-NAME | startyear | endyear選擇相同的姓氏,但不是相同的名稱

把它與同FNAME和LNAME一個人是一個獨特的人。 可以有多個具有相同fname | lname的條目。

1)我如何找到屬於不同人的所有相同的姓氏?

例如 'tom'|'jerry'| 1990 | 1991 |

'vlad'|'jerry'| 1991 | 1992 |

'tim'|'cook'| 1991 | 1992 |

'tim'|'cook'| 1992 | 1993 |

輸出:

傑裏

2)哪些人(姓和名)'瑪麗「簡的兩個詞之間的服務?

例如 'mary'|'jane'| 1989 | 1990 |

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

'vlad'|'jerry'| 1991 | 1992 |

'tim'|'cook'| 1991 | 1992 |

'tim'|'cook'| 1992 | 1993 |

'瑪麗' |'簡| 1993 | 1994年

輸出

湯姆傑裏

維拉德傑裏

庫克

+0

您能否提供樣本輸入和輸出? – Teja

+0

alrite編輯。請看看 – RStyle

+0

在詢問SQL問題時,請始終包含您正在使用的特定數據庫。 – sstan

回答

1

1)在本下面的查詢中,內聯視圖爲您提供了fname,lname's和它與lname上的原始表格的所有獨特組合,它將爲您提供所有獨特的lnames,但首先有多個名。

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)在此查詢,線視圖將返回分鐘年份和瑪麗珍供應,那麼它的跨加入原表和比較的startyear和endyear所做的條款最多一年這將給你所有在瑪麗珍之間服務的人名。

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

如果你喜歡這個soln,你可以upvote .... – Teja

相關問題