Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Problem beim Entwurf gespeicherter MySQL-Prozeduren. Rekussion oder Hierarchie?

Ein guter Ausgangspunkt wäre:

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;

Setzen Sie dies in Ihrer gespeicherten Prozedur in einen Cursor, iterieren Sie über den Cursor und führen Sie für jede Zeile ein INSERT IGNORE aus. Dh:

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;

Um Ihre aktualisierte Frage zu beantworten, sind Sie sich nicht ganz sicher, ob Sie durch Beziehungen zwischen eindeutigen Zeilen verbunden sind (Sie würden zwei Spalten benötigen, um diese Beziehung zu speichern, daher wäre sie ziemlich ähnlich). Oder wenn Sie meinen, Sie haben eine Tabelle, die alle Zahlen enthält, und eine weitere zweispaltige Tabelle, die Beziehungen zwischen den Zeilen der ersten Tabelle enthält.

Oder schließlich, wenn Sie eine Tabelle möchten, die nur Zeichenfolgen mit "1-2", "1-3" usw. enthält. Wenn dies der Fall ist, würde ich sie als zwei einzelne Spalten behalten und sie bei der Abfrage einfach als Zeichenfolgen mit CONCAT ausgeben der Tisch :)