今天我有期末考试。我很高兴地批准了 :D 但其中一个问题真的让我大吃一惊。
我需要帮助,这样我才能安息。
问题
我们有一张“人”表
(PK)id | name | fatherID
---------------------
1 | gon | 2
2 | cesar| 6
3 | luz | 2
4 | maria| 5
5 | diego| 6
6 | john | -
这只是数据的一个例子。这个表与它本身有关系,在表fatherId(FK)和表id(PK)上我需要做一个查询,显示2列,一列是人名,另一列是他/她的表弟.
很简单,直到这里,对吧?问题是我有一些限制
- 仅允许使用 ANSI。没有 T-sql,或另一个。此外,ANSI 99 标准,不是 2003 或更高版本
- 不允许子查询。最糟糕的是:
- 没有关系重复。
例如,考虑到在这个例子中,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 count(*) 和 order by 并得到一半正确”
但是..Top
不是ANSI
!