開始するのに適した場所は次のとおりです。
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;
ストアドプロシージャ内で、これをカーソルに入れ、カーソルを繰り返し処理し、各行に対してINSERTIGNOREを実行します。つまり:
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;
更新された質問に答えるために、一意の行間の関係によって接続されているかどうかは完全にはわかりません(この関係を格納するには、2つの列が必要になるため、非常によく似ています)。または、すべての数値を含む1つのテーブルと、最初のテーブルの行間の関係を含む別の2列のテーブルがある場合。
または、最後に、「1-2」、「1-3」などの文字列のみを含むテーブルが必要な場合は、2つの個別の列として保持し、ポーリング時にCONCATを使用して文字列として出力します。テーブル:)