Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để chỉ nhận được các nút con cấp độ sâu đầu tiên?

Đây là một giải pháp:

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 |
+----------+--------+

Thay đổi p1.parent =7 và bạn nhận được kết quả này:

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

Đây là cách nó hoạt động:con cái ngay lập tức là con cháu trong đó có một đường dẫn từ cha mẹ đến con, nhưng không có đường dẫn từ cha mẹ qua một nút thứ ba đến con. Vì vậy, chúng tôi cố gắng tham gia vào một đường dẫn như vậy (p2-> p3) và nếu không tìm thấy, thì tất cả các cột của p2 và p3 sẽ là 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. Chọn bản ghi mới nhất từ ​​bảng bên phải khi sử dụng tham gia trong mysql

  2. Tại sao đặc quyền SUPER bị vô hiệu hóa khi tùy chọn ghi nhật ký nhị phân được bật?

  3. Các bản sao của một bảng quan hệ

  4. Xác thực và chèn PHP-Form bằng MySql

  5. Ruby, Rails:đá quý mysql2, có ai sử dụng viên đá quý này không? Nó có ổn định không?