Mysql
 sql >> база данни >  >> RDS >> Mysql

Проблем с дизайна на MySQL Съхранени процедури. Рекусия или йерархия?

Добро място за начало би било:

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, когато анкетите масата :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се присъедините към една и съща маса, два пъти, в mysql?

  2. MYSQL избира произволно от всяка от категориите

  3. Съхранената процедура смесва резултати във временни таблици от различни извиквания

  4. Намиране на разликата между две стойности в една и съща колона в MySQL

  5. Mysql:Създаване на вградена таблица в оператора за избор?