Сегодня у меня есть итоговый экзамен. Я с радостью согласился: D, но одна из проблем действительно раздувает мой разум.Запрос на стол, соединенный с самим собой
Мне нужна помощь, поэтому я могу спокойно отдохнуть.
ПРОБЛЕМА
У нас есть таблица "Люди"
(PK)id | name | fatherID
---------------------
1 | gon | 2
2 | cesar| 6
3 | luz | 2
4 | maria| 5
5 | diego| 6
6 | john | -
это только пример данных. Эта таблица имеет отношение к себе, по таблице fatherId (FK) с идентификатором таблицы (PK) Мне нужно сделать запрос, который показывает мне 2 столбца, в одном имени человека, а в другом - его/ее кузен.
Довольно простой, пока здесь, не так ли? Проблема в том, что у меня есть некоторые ограничения
- ТОЛЬКО ANSI разрешено. NO T-sql или другой. Кроме того, ANSI 99 стандарт, а не 2003 или выше
- подзапросы не допускаются. И самое плохое:
- NO отношения повторяются.
Например, учитывая в этом примере, 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
конечно, это не решает последнюю requeriment, и у меня есть 4 в тесте (мы проходим с 4), но в любом случае , голова горит. Пожалуйста, помогите мне!
Еще варианты изучены
один из моих друзей, которые также имели один и тот же экзамен, сказал мне
«Ну, учитывая каждое отношение дублируется, я могу использовать верхнюю COUNT (*) и порядок и получить половину верных "
но .. Top
не ANSI
!