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

MySQL nadřazené děti výběr jednoho dotazu

Potřebujete rekurzivní spojení, které mysql nepodporuje. Jediné, co můžete udělat, je určit maximální úroveň hloubky (ve vašem případě je to 1, protože máte p->c) a pomocí toho můžete určit počet potřebných spojení:

maximální úroveň hloubky =počet vlastních spojení :

SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id,
    c1.name as child_name
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
WHERE
    p.parent=0

Například pokud vaše maximální úroveň hloubky byla 3, budete potřebovat 3 vlastní spojení:

SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id_1,
    c1.name as child_name_1,
    c2.id as child_id_2,
    c2.name as child_name_2,
    c3.id as child_id_3,
    c3.name as child_name_3
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
LEFT JOIN my_table c2
    ON c2.parent = c1.id
LEFT JOIN my_table c3
    ON c3.parent = c2.id
WHERE
    p.parent=0


  1. Jak získat maximum ze dvou hodnot v MySQL?

  2. Jak překonat náhodné smazání dat v MySQL a MariaDB

  3. Jaký je maximální počet znaků pro NVARCHAR(MAX)?

  4. Přetrvávající UUID v PostgreSQL pomocí JPA