Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mendapatkan hanya node anak kedalaman tingkat pertama?

Ini solusinya:

select p1.* from tree_path as p1
left outer join (tree_path as p2 join tree_path as p3 on p2.children = p3.parent)
 on p2.parent = p1.parent 
 and p3.children = p1.children 
 and p2.parent <> p2.children 
 and p3.parent <> p3.children
where p1.parent = 3 and p2.parent is NULL;
+----------+--------+
| children | parent |
+----------+--------+
|        3 |      3 |
|        7 |      3 |
|        8 |      3 |
+----------+--------+

Ubah p1.parent=7 dan Anda mendapatkan output ini:

+----------+--------+
| children | parent |
+----------+--------+
|        7 |      7 |
|       15 |      7 |
|       16 |      7 |
+----------+--------+

Begini cara kerjanya:anak langsung adalah keturunan di mana ada jalur dari orang tua ke anak, tetapi tidak ada jalur dari orang tua melalui simpul ketiga ke anak. Jadi kami mencoba bergabung ke jalur seperti itu (p2->p3) dan jika tidak ada yang ditemukan, maka semua kolom p2 dan p3 akan menjadi NULL.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - cetak banyak kata di antara setiap kolom dengan banyak kondisi

  2. SQLException Aneh:Kolom tidak ditemukan

  3. Apa perbedaan antara Server MySQL dan Klien MySQL?

  4. cara menyuntikkan sql dalam proses login

  5. INSERT dengan syarat