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

MySQLストアドプロシージャの設計の問題。再帰または階層?

    開始するのに適した場所は次のとおりです。

    SELECT 
        A.num_1, B.num_2 
    FROM 
        Smaller AS A JOIN Smaller AS B ON (A.num_1 < B.num_2) 
    ORDER BY A.num_1, B.num_2;
    

    ストアドプロシージャ内で、これをカーソルに入れ、カーソルを繰り返し処理し、各行に対してINSERTIGNOREを実行します。つまり:

    DECLARE num1,num2 INT;
    DECLARE done DEFAULT 0;
    DECLARE mycursor CURSOR FOR SELECT # use the select above, im lazy here
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
    OPEN mycursor;
    
    my_loop: LOOP
        FETCH mycursor INTO num1, num2;
        IF done THEN
           LEAVE my_loop;
        END IF;
        INSERT IGNORE INTO Smaller VALUES (num1,num2);
    END LOOP;
    

    更新された質問に答えるために、一意の行間の関係によって接続されているかどうかは完全にはわかりません(この関係を格納するには、2つの列が必要になるため、非常によく似ています)。または、すべての数値を含む1つのテーブルと、最初のテーブルの行間の関係を含む別の2列のテーブルがある場合。

    または、最後に、「1-2」、「1-3」などの文字列のみを含むテーブルが必要な場合は、2つの個別の列として保持し、ポーリング時にCONCATを使用して文字列として出力します。テーブル:)




    1. クエリプランのビットマップヒープスキャンとは何ですか?

    2. ORDER BY句のパラメータをバインドしないと結果が順序付けられないのはなぜですか?

    3. 挿入された行を更新するためのMysqlトリガー

    4. 日ごとにグループ化されたrand()によるMySQLの順序