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

MySQL родителски деца избор на една заявка

Имате нужда от рекурсивно присъединяване, което mysql не поддържа. Единственото нещо, което можете да направите, е да определите максималното ниво на дълбочина (аз вашия случай е 1, тъй като имате p->c) и с това можете да определите броя на необходимите присъединявания:

максимално ниво на дълбочина =брой самосъединявания :

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

Например, ако максималното ви ниво на дълбочина е 3, ще ви трябват 3 самообединявания:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да избера цял ред, който има най-голям идентификатор в таблицата?

  2. Всяка извлечена таблица трябва да има своя собствена грешка в псевдонима

  3. Групиране на множество Mysql оператори за извличане на броя на множество състояния

  4. Какво е предимството да използвате try {} catch {} спрямо if {} else {}

  5. MySQL Version Control - Subversion