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以外のプログラミング言語を使用してチェーンを構築することもできます。