За последние 24 часа нас посетили 22163 программиста и 1152 робота. Сейчас ищет 351 программист ...

Задачка на родственные связи sql

Тема в разделе "PHP и базы данных", создана пользователем karin87, 23 дек 2020.

Метки:
  1. karin87

    karin87 Новичок

    С нами с:
    23 дек 2020
    Сообщения:
    1
    Симпатии:
    0
    Всем привет! Я новичок, на данный момент изучаю MySql. Попалась задачка, хотелось бы посоветоваться по поводу решения. Итак, задачка:
    У каждого отца всегда только один сын. Сыновья в свою очередь также могут быть отцами. Необходимо написать запрос , чтобы получить пользователя вместе с его отцом и сыном. При этом таблица должна быть одна.
    Есть такое решение:
    Таблица 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
     
  2. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    а тебя не смущает, что ты делаешь джоин при условии, что таблица должна быть одна?
    --- Добавлено ---
    как я понимаю тут просто группировка должна быть или тупо where id = 5 and father_id = 5

    показываем папу и всех сыновей папы с пятым айдишником