Поскольку MySQL не позволяет пользователям создавать рекурсивную функцию, позвольте мне показать вам, с помощью хранимой процедуры:
Предполагая, что таблица вы работаете называется «тест».
DELIMITER $$
DROP PROCEDURE IF EXISTS build_chain$$
CREATE PROCEDURE build_chain(init CHAR(1))
BEGIN
IF init != '-' THEN
SET @r := (SELECT DISTINCT(root) FROM test WHERE root = init);
SET @search_type := TRUE;
SET @result := @r;
END IF;
SET @r := (SELECT DISTINCT(connector) FROM test WHERE root = @r AND connector != '-');
SET @result = CONCAT_WS('->', @result, @r);
SET @search_type = IF(@search_type, FALSE, TRUE);
IF @r IS NOT NULL THEN CALL build_chain('-'); ELSE SELECT @result AS result_chain; END IF;
END$$
DELIMITER ;
Использование:
SET max_sp_recursion_depth = 255;
CALL build_chain('a');
Результат (цепь) хранится в @result переменной.
Примечание: вы также можете построить цепочку, используя язык программирования, отличный от MySQL.
Какой язык программирования вы используете? –