|
Задачка на родственные связи sql
|
|||
---|---|---|---|
#18+
Всем привет! Я новичок. Попалась задачка, хотелось бы посоветоваться по поводу решения. Итак, задачка: У каждого отца всегда только один сын. Сыновья в свою очередь также могут быть отцами. Необходимо написать запрос , чтобы получить пользователя вместе с его отцом и сыном. При этом таблица должна быть одна. Есть такое решение: Таблица users с полями id, name, son_id, father_id Решение: SELECT table2.users AS users, table2.son AS son, users.name AS father FROM (SELECT table1.name AS users, table1.father_id AS father_id, users.name AS son FROM users AS table1 LEFT JOIN users ON users.id=table1.son_id) AS table2 LEFT JOIN users ON table2.father_id=users.id Но хотелось бы его упростить. Ведь столбец father_id как бы и не нужен. Кто кому кем приходится можно узнать и с помощью son_id. И вот если мы убираем father_id, то у меня получается вывести только либо name и son, либо name и father Либо получаем отцов: SELECT *, user.name as father_name FROM user JOIN user as father ON father.id=user.son_id Либо сыновей: SELECT *, user.name as son_name FROM user JOIN user as son ON son.son_id=user.id ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 00:31 |
|
Задачка на родственные связи sql
|
|||
---|---|---|---|
#18+
3 таблицы связываем... столбец father_id как бы и не нужен - да, это верно. Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 03:37 |
|
Задачка на родственные связи sql
|
|||
---|---|---|---|
#18+
Alex_Ustinov, спасибо! Только с U не получилось, поэтому такое решение: SELECT user.name as user, F.name as father, S.name as son FROM user LEFT JOIN user as F ON F.son_id=user.id LEFT JOIN user as S ON S.id=user.son_id ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2020, 21:28 |
|
|
start [/forum/topic.php?fid=47&msg=40030695&tid=1828264]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 385ms |
0 / 0 |