Как найти брата студента - PullRequest
0 голосов
/ 23 октября 2019

У меня есть две таблицы в mysql, одна из которых является student, а другая - student_sibling со следующей структурой.

Student:

student_id    name  
------------------
1             anu    
2             manu
3             tanu
4             pinu
..            ..

таблица student_sibling:

student_id    sibling_student_id
--------------------------------
1              4    
15             4    
2              1    
6              15

, если я вставлю одноуровневый идентификатор 1как 4, голос за кадром также является родным, и таким же образом 1 также является родным из 15 и 2, например, если я хочу показать брата любого студента_id 4 в mysql, то он должен показать:

1

2

6

15

у меня естьпробовал следующий запрос, но он показывает только 1 и 15: заранее спасибо всем замечательным парням

SELECT student_id  
FROM `student_sibling` 
WHERE student_id=4 or sibling_student_id=4
UNION 
SELECT sibling_student_id, 
FROM `student_sibling` 
WHERE student_id=4 or sibling_student_id=4

1 Ответ

0 голосов
/ 23 октября 2019

Если вы используете MySQL версии 8.0 или выше и можете использовать ниже рекурсивный запрос -

WITH RECURSIVE CTE AS (SELECT student_id
                       FROM student_sibling
                       WHERE sibling_student_id=4
                       UNION
                       SELECT S.student_id
                       FROM CTE C
                       JOIN student_sibling S ON S.sibling_student_id = C.student_id)
SELECT student_id FROM CTE
ORDER BY student_id;

Здесь - это скрипка.

...