sql >> Databáze >  >> RDS >> Mysql

Problém návrhu uložené procedury MySQL. Rekuse nebo hierarchie?

Dobrým místem pro začátek by bylo:

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;

Uvnitř uložené procedury to vložte do kurzoru, iterujte přes kurzor a pro každý řádek proveďte INSERT IGNORE. Tj.:

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;

Abych odpověděl na vaši aktualizovanou otázku, i když si nejsem úplně jistý, zda máte na mysli spojené jako pomocí vztahů mezi jedinečnými řádky (k uložení tohoto vztahu byste potřebovali dva sloupce, takže by to bylo docela podobné). Nebo pokud máte na mysli, že máte jednu tabulku obsahující všechna čísla a další tabulku se dvěma sloupci obsahující vztahy mezi řádky první tabulky.

Nebo konečně, pokud chcete tabulku obsahující pouze řetězce s "1-2", "1-3" atd. Pokud je tomu tak, ponechal bych ji jako dva samostatné sloupce a při dotazování bych je vypsal jako řetězce pomocí CONCAT stůl :)




  1. aktualizační dotaz se spojením dvou tabulek

  2. mysql vyberte různé řádky do sloupce seznamu odděleného čárkami

  3. Doctrine DQL spojení na sloupcích s možnou hodnotou Null

  4. Kdy byste měli používat SQL Server s Access? (Tip:Téměř vždy)