Próbuję napisać zapytanie sql na tabeli poniżej.Zapytanie SQL dla relacji z rodzicami dzieci
╔════╦══════════╦═══════╗======╗======╗
║ ID ║ NAME ║ CLASS ║PARENT║ DOB ║
╠════╬══════════╬═══════╣======║======║
║ 1 ║ DAVID ║ SPIN ║ ║1 ║
║ 2 ║ AROON ║ BIKE ║ 1 ║1 ║
║ 3 ║ LEO ║ YOGA ║ ║2 ║
║ 4 ║ LIN ║ CYC ║ 1 ║2 ║
║ 5 ║ STEFA ║ YOGA ║ ║3 ║
║ 6 ║ GLORIA ║ RUNN ║ 1 ║3 ║
╚════╩══════════╩═══════╝======╝======╝
A, wyjście dla tej tabeli powinno być następujące
╔════╦════════╦═══════╗======╗======╗
║ ID ║ NAME ║ CLASS ║PARENT║ DOB ║
╠════╬════════╬═══════╣======║======║
║ 1 ║ DAVID ║ SPIN ║ ║1 ║
║ 2 ║ AROON ║ BIKE ║ 1 ║1 ║
║ 4 ║ LIN ║ CYC ║ 1 ║2 ║
║ 6 ║ GLORIA║ RUNN ║ 1 ║3 ║
║ 3 ║ LEO ║ YOGA ║ ║2 ║
║ 5 ║ STEFAN║ YOGA ║ ║3 ║
╚════╩════════╩═══════╝======╝======╝
So this is the explanation of the output
First parent David as his DOB is 1,
--David three childrens sorted based on DOB
Then LEO as his DOB is 2
-- Leo do not have children[if he did, would be here as sorted on DOB]
Then Stefan as his DOB is 3
-- Stefan do not have children [if he did, would be here as sorted on DOB]
Więc co próbowałem?
SELECT * FROM user group by ID, PARENT ;
Przede SQL, powrotne rzeczy oświadczenie w macierzystej grupy dzieci, ale nie nie utrzymuje dowolnej kolejności, kiedy dodać ORDER BY
, SQL
nie wydaje się już uhonorowanie GROUP BY.
Potem próbowałem połączyć i zakończyć z dwoma kompletnymi tabelami, w których jeden zawiera wszystkich rodziców, a drugi zawiera wszystkie dzieci. UNION ALL
w tej dwóch kwerendach zwrócił oczekiwany zestaw danych, ale nie w oczekiwanej kolejności.
Jakieś myśli?
UPDATE
Output should be
Pick entry [based on min time ].
--use that id and find all of its children and placed them in sorted order
repeat for every row in the table
Uwaga:
--parents are sorted based on DOB
--child's are also sorted based on DOB
--DOB are valid timestamp
--PARENT, ID field both are UUID and define as CHAR, PARENT reference to ID
Update 1
Zapytanie ryczeć
WITH RECURSIVE
top AS (
SELECT * FROM (SELECT * FROM user WHERE PARENT is null ORDER BY dob LIMIT 1)
UNION
SELECT user.NAME, user.PARENT, user.ID, user.CLASS, user.DOB FROM user, top WHERE user.PARENT=top.ID
ORDER BY user.dob
) SELECT * FROM top;
powrocie następujące wyjścia:
╔════╦════════╦═══════╗======╗======╗
║ ID ║ NAME ║ CLASS ║PARENT║ DOB ║
╠════╬════════╬═══════╣======║======║
║ 1 ║ DAVID ║ SPIN ║ ║1 ║
║ 2 ║ AROON ║ BIKE ║ 1 ║1 ║
║ 4 ║ LIN ║ CYC ║ 1 ║2 ║
║ 5 ║ GLORIA║ RUNN ║ 1 ║3 ║
╚════╩════════╩═══════╝======╝======╝
Wyjście jest dobre dla pierwszego rodzica. Ale wciąż nie mogłem zrozumieć, jak mogę powtarzać przez resztę rodziców i ich dzieci w uporządkowanej kolejności.
Wyjście wygląda tak samo jak wejście. Co tu się dzieje? –
Po prostu ponownie sprawdzone put jest inny niż w put. – minhaz
Jedyna różnica jaką widzę, to kolejność. Nie szaleję też za używaniem 'SELECT *' z 'GROUP BY'. –