今日は期末試験があります。私は喜んで承認しました:Dしかし、問題の1つが本当に私の心を吹き飛ばしています.
助けが必要なので、安心して休むことができます。
問題
「人」というテーブルがあります
(PK)id | name | fatherID
---------------------
1 | gon | 2
2 | cesar| 6
3 | luz | 2
4 | maria| 5
5 | diego| 6
6 | john | -
これはデータの一例です。このテーブルは、テーブル id(PK) を持つテーブル FatherId(FK) で、それ自体との関係を持っています。2 つの列を表示するクエリを実行する必要があります。 .
ここまではかなり簡単ですよね?問題は、私にはいくつかの制限があることです
- ANSI のみが許可されます。NO T-sql、または別のもの。また、2003年以降ではなく、ANSI 99規格
- サブクエリは許可されていません。そして最悪:
- 繰り返される関係はありません。
たとえば、この例を考えると、gon と maria はいとこです。表示gon | maria
すると、結果に表示できませんmaria | gon
。
どうすればこれを行うことができますか?本当に私の頭を燃やしています。
私が試したことは?
さて、大きな問題は、最後の要件であるデータの繰り返しにありました。それを無視して、私はこれを私の試験に入れました(知っているのは間違っています..)
select p3.name as OnePerson, p4.name as Cousin
from
people p1
inner join people p2 on p1.fatherid = p2.fatherid and p1.id != p2.id
inner join people p3 on p1.id = p3.fatherid
inner join people p4 on p1.id = p4.fatherid
もちろん、これは最後の要求を解決しているわけではなく、テストで 4 を獲得しました (4 で合格) が、とにかく、私の頭は燃えています。助けてください!
検討された別のオプション
同じ試験を受けた私の友人の一人が私に言った
「まあ、すべての関係が重複していることを考えると、トップカウント(*)とオーダーバイを使用して、半分を正しく取得できます」
しかし、そうでTop
はありませんANSI
!