sql >> Base de Datos >  >> RDS >> Mysql

Problema de diseño de procedimientos almacenados de MySQL. ¿Recusión o jerarquía?

Un buen lugar para comenzar sería:

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;

Dentro de su procedimiento almacenado, coloque esto en un cursor, itere sobre el cursor y para cada fila haga INSERT IGNORE. Es decir:

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;

Para responder a su pregunta actualizada, no estoy del todo seguro si quiere decir conectado por medio de relaciones entre filas únicas (necesitaría dos columnas para almacenar esta relación, por lo que sería bastante similar). O si quiere decir que tiene una tabla que contiene todos los números y otra tabla de dos columnas que contiene las relaciones entre las filas de la primera tabla.

O, finalmente, si desea una tabla que solo contenga cadenas con "1-2", "1-3", etc. Si ese es el caso, lo mantendría como dos columnas individuales y las mostraría como cadenas usando CONCAT cuando sondee la mesa :)