Я думаю, вам нужна хранимая процедура. Я не думаю, что вы можете сделать это с помощью одного SQL-оператора.
Я не знаком с написанием процедур SQL, но somtehintg вроде этого может помочь:
CREATE FUNCTION GetPath(startingID INT)
@outputVal VARCHAR(20) OUTPUT
BEGIN
DECLARE x INT;
SELECT category_id INTO x FROM table2 Where product_id = startingID;
SET outputVal = x;
sloop:LOOP
SELECT category_id INTO x FROM table1 WHERE parent_id = x;
IF x IS NOT NULL THEN
SET outputVal = outputVal + "," + x;
ITERATE sloop;
ELSE
LEAVE sloop;
END IF;
END LOOP;
RETURN outputVal;
END $$
Пожалуйста, проверьте правильность написания !!!
Чтобы получить результаты, вам нужно что-то вроде:
SELECT GetPath (123);
Но будьте осторожны: это решение может заканчиваться бесконечным циклом, когда процедура никогда не находит «NULL»!
Надеюсь, я помог!