Если у вас неограниченная вложенность, то только через рекурсивный запрос. MySQL 8 научился их делать. Это позволит вам рекурсивно собрать в одном из полей запроса данные из зависимых таблиц. Вот
документация
Вот пример:
CREATE TABLE cat(
id INT NOT NULL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
parent_id INT NULL
);
INSERT INTO cat VALUE (1, 'Root1', NULL), (2, 'Root2', NULL), (3, 'Child1', 1),
(4, 'Child2', 3), (5, 'Child3', 2);
WITH RECURSIVE rcat(id, title, path) AS (
SELECT cat.id, cat.title, CAST(cat.id AS CHAR(200)) FROM cat WHERE parent_id IS NULL
UNION ALL
SELECT cat.id, cat.title, CONCAT(rcat.path, ',', cat.id) FROM cat JOIN rcat ON cat.parent_id=rcat.id
)
SELECT * FROM rcat WHERE id=4;
Пример