2016-09-15 9 views
0

私がfnameの持つテーブルを持っているを選択| LNAME | startyear | endyear同じ姓ではなく、同じ名前

は同じFNAMEとLNAMEを持つ人がユニークな人物であることをそれを取ります。 同じfname | lnameを持つ複数のエントリが存在する可能性があります。

1)どのように私は異なる人に属するすべての同じ姓を見つけるのですか?

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

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

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

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

出力:

ジェリー

2)人(姓と名) 'がメアリー'「ジェーンの二つの用語の間務めましたか?

Eg 'mary' | 'jane' | 1989 | 1990 |

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

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

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

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

'メアリー' | 'ジェーン' | 1993年| 1994

出力

トムジェリー

ヴラドジェリー

TIMは、クエリの下にこの中

+0

サンプルの入出力は可能ですか? – Teja

+0

編集を編集しました。どうぞご覧ください – RStyle

+0

SQL質問をするときに使用している特定のデータベースを常に含めてください。 – sstan

答えて

1

1)料理インラインビューは、fname、lname、それにlnameの元のテーブルを結合したユニークな組み合わせで、すべてのユニークな名前が与えられますが、最初はマルチプル名前。

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に行われている用語の最小年とmax年を返します。メアリージェーンとメアリージェーンの間で働いていた全ての名前をあなたに与えます。

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

あなたがあなたが好きなら、あなたはアップアップできますか.... – Teja

関連する問題