Для реализации рекурсивных запросов требуется Общее табличное выражение (CTE).
Этот запрос вычисляет предков всех родительских узлов. Поскольку нам нужен только верхний уровень, мы выбираем, где уровень = 0.
WITH RECURSIVE Ancestors AS
(
SELECT id, parent, 0 AS level FROM YourTable WHERE parent IS NULL
UNION ALL
SELECT child.id, child.parent, level+1 FROM YourTable child INNER JOIN
Ancestors p ON p.id=child.parent
)
SELECT * FROM Ancestors WHERE a.level=0 AND a.id=C
Если вы хотите получить все ваши данные, используйте внутреннее соединение с идентификатором, например,
SELECT YourTable.* FROM Ancestors a WHERE a.level=0 AND a.id=C
INNER JOIN YourTable ON YourTable.id = a.id