2

今日は期末試験があります。私は喜んで承認しました: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

4

3 に答える 3

3

クエリに追加できますWHERE p3.id < p4.idgon | mariaこれにより、およびのような重複した結果が排除されますmaria | gon

于 2013-05-22T02:34:14.473 に答える