Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problème de conception de procédure stockée MySQL. Récusation ou Hiérarchie ?

Un bon point de départ serait :

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;

Dans votre procédure stockée, mettez ceci dans un curseur, parcourez le curseur et pour chaque ligne, faites un INSERT IGNORE. C'est-à-dire :

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;

Pour répondre à votre question mise à jour, tout en n'étant pas tout à fait sûr si vous voulez dire connecté au moyen de relations entre des lignes uniques (vous auriez besoin de deux colonnes pour stocker cette relation, elle serait donc assez similaire). Ou si vous voulez dire que vous avez un tableau contenant tous les nombres, et un autre tableau à deux colonnes contenant les relations entre les lignes du premier tableau.

Ou, enfin, si vous voulez une table contenant uniquement des chaînes avec "1-2", "1-3", etc. Si c'est le cas, je la conserverais sous forme de deux colonnes individuelles et les afficherais simplement sous forme de chaînes en utilisant CONCAT lorsque vous interrogez le tableau :)