Хорошее место для начала было бы:
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;
Внутри вашей хранимой процедуры поместите ее в курсор, переберите курсор и для каждой строки сделайте INSERT IGNORE.Т.е.:
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;
Чтобы ответить на ваш обновленный вопрос, хотя и не совсем уверен, имеете ли вы в виду связь как с помощью отношений между уникальными строками (вам понадобятся два столбца для хранения этого отношения, поэтому оно будет весьма похоже).Или, если вы имеете в виду, что у вас есть одна таблица, содержащая все числа, и еще одна таблица из двух столбцов, содержащая отношения между строками первой таблицы.
Или, наконец, если вам нужна таблица, содержащая только строки с "1-2"," 1-3 "и т. Д. Если это так, я бы оставил его в виде двух отдельных столбцов и просто вывел бы их в виде строк, используя CONCAT при опросе таблицы:)