今天我有期末考试。我很高兴地批准了:D,但其中一个问题确实让我大吃一惊。
我需要帮助,这样我才能安心。
问题
我们有一个表“People”
(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 |贡
.
那么,我该怎么做呢? 真是让我头疼。
我尝试了什么?
嗯,最大的问题是最后一个必要条件,即数据的重复。忽略这一点,我把它放在我的考试中(知道是错误的..)
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分通过),但无论如何,我的头在燃烧。所以请帮助我!
探索了其他选项
我的一个 friend 也参加了同样的考试,他对我说
"Well, considering every relation is duplicated, I can use top count(*) and an order by and get the half correct"
但是..Top
不是ANSI
!
最佳答案
您可以在查询中添加 WHERE p3.id < p4.id
。这将消除重复的结果,例如 gon | maria
和maria | gon
.
关于sql - 查询与自身连接的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16682499/