データを格納するために、MsSQL に 3 つのテーブルがあります。
最初の 1 つは Children で、ID、Name、Age、FatherID、SchoolID の行が含まれています。
2 番目のものには、FatherID、Name、Age などの父親のデータが含まれています。
3 つ目は、SchoolID と SchoolName、Address などを持つ School です。
(関係は次のとおりです: 複数の子供が同じ父親を持つことができます, 明らかに:) )
リストしたいのは、特定の SchoolID に関連するすべての家族です。
私はカーソルベースのソリューションを知っています:
*カーソルは 2 つの一時テーブルを操作しています。最初のステップでは、特定のスクール ID を持つ子供を 1 つの一時テーブル (@tempfamilymembers) に選択します。
2 番目のステップは、このテーブルから異なるファザー ID を選択し、それを 2 番目の一時テーブル (@fatherids) に保存することです。
次に、これらのファーザー ID をループして、(@fatherids からの) ファーザー ID が一致するファーザーを最初の一時テーブル (@tempfamilymembers) に挿入します。
次に、@tempfamilymembers からすべてを選択して、クエリを完了することができます*
カーソルベースのソリューションは難しすぎて、比較的遅いことに加えて、ループがより良いパフォーマンスを示していると聞いたので、セットベースのアプローチはさらに優れています。
私の質問は次のとおりです。カーソルを作成せずに、どうにかしてこれを達成できますか? (このリストに存在する父親を一度だけリストしたい. 彼に複数の子供がいるとしても. )