sql >> データベース >  >> RDS >> Mysql

MySQLで再帰的なSELECTクエリを実行するにはどうすればよいですか?

    編集

    @leftclickbenが言及した解決策も効果的です。同じためにストアドプロシージャを使用することもできます。

    CREATE PROCEDURE get_tree(IN id int)
     BEGIN
     DECLARE child_id int;
     DECLARE prev_id int;
     SET prev_id = id;
     SET child_id=0;
     SELECT col3 into child_id 
     FROM table1 WHERE col1=id ;
     create TEMPORARY  table IF NOT EXISTS temp_table as (select * from table1 where 1=0);
     truncate table temp_table;
     WHILE child_id <> 0 DO
       insert into temp_table select * from table1 WHERE col1=prev_id;
       SET prev_id = child_id;
       SET child_id=0;
       SELECT col3 into child_id
       FROM TABLE1 WHERE col1=prev_id;
     END WHILE;
     select * from temp_table;
     END //
    

    出力の結果を保存するために一時テーブルを使用しています。一時テーブルはセッションベースであるため、出力データが正しくないことに関する問題は発生しません。

    SQL FIDDLE Demo

    次のクエリを試してください:

    SELECT 
        col1, col2, @pv := col3 as 'col3' 
    FROM 
        table1
    JOIN 
        (SELECT @pv := 1) tmp
    WHERE 
        col1 = @pv
    

    SQL FIDDLE Demo

    | COL1 | COL2 | COL3 |
    +------+------+------+
    |    1 |    a |    5 |
    |    5 |    d |    3 |
    |    3 |    k |    7 |
    


    parent_id 値はchild_idより小さくする必要があります このソリューションが機能するために。



    1. SQLiteException:テーブルはすでに存在します

    2. SQL ServerでのCOUNT()のしくみ

    3. SQLServerをOracleに接続する

    4. rownumを使用してテーブルの2番目の行を選択する