Mysql
 sql >> Database >  >> RDS >> Mysql

Problema di progettazione della stored procedure MySQL. Ricussione o gerarchia?

Un buon punto di partenza sarebbe:

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;

All'interno della tua procedura memorizzata, inserisci questo in un cursore, esegui un'iterazione sul cursore e per ogni riga fai un INSERT IGNORE. Cioè:

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;

Per rispondere alla tua domanda aggiornata, mentre non è del tutto sicuro se intendi connesso come per mezzo di relazioni tra righe uniche (avresti bisogno di due colonne per memorizzare questa relazione, quindi sarebbe abbastanza simile). O se vuoi dire che hai una tabella contenente tutti i numeri e un'altra tabella a due colonne contenente le relazioni tra le righe della prima tabella.

O, infine, se vuoi una tabella contenente solo stringhe con "1-2", "1-3" ecc. In tal caso, la terrei come due colonne singole e le emetterò semplicemente come stringhe usando CONCAT quando esegui il polling il tavolo :)