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

Có giải pháp thay thế `kết nối bằng` trong MySQL không?

Như đã nói trong phần bình luận, không có con đường ngắn với mysql.

NHƯNG!

Nếu có khả năng thay đổi cấu trúc cơ sở dữ liệu, bạn có thể triển khai một thiết kế tốt hơn để xử lý cấu trúc phân cấp dạng cây.

Nếu bạn theo dõi HƯỚNG DẪN NÀY từ Bill Karwin ( TẠI ĐÂY là câu trả lời gốc tham chiếu đến hướng dẫn trình chiếu đó), bạn có thể tìm thấy 4 phương pháp được sử dụng để lập mô hình cấu trúc phân cấp:

  1. Danh sách lần truy cập gần đây
  2. Liệt kê Đường dẫn
  3. Tập hợp lồng nhau
  4. Bảng kết thúc

Bây giờ, mô hình tốt nhất có thể là mô hình thứ 4 (tôi để lại mô tả về 3 mô hình còn lại cho người đọc), về cơ bản cần 2 bảng:một cho các phần tử và một cho các đường dẫn. Trong bảng đường dẫn (chính bảng đóng), bạn sẽ lưu trữ mọi đường dẫn từ mỗi nút đến mọi nút con (không chỉ các nút con trực tiếp!).

Bạn cũng nên lưu độ dài đường dẫn cho mỗi hàng, vì nó giúp dễ dàng truy vấn các phần tử con ngay lập tức trong cây.

Ngay cả khi giải pháp này yêu cầu nhiều không gian hơn, nó có hiệu suất tổng thể tốt nhất và thực sự dễ sử dụng:nó hoàn toàn không dựa vào các truy vấn đệ quy VÀ nó sẽ cấp toàn vẹn tham chiếu cho toàn bộ tập dữ liệu!

Ví dụ:để lấy mọi nút con của nút số 4:

select a.*
from nodes a
join paths b
on a.node_id = b.descendant
where b.ancestor = 4

Một ví dụ khác:lấy tất cả tổ tiên của nút # 11

select a.*
from nodes a
join paths b
on a.node_id = b.ancestor
where b.descendant = 11

cần xóa cây con của nút số 6

delete from paths where descendant in
(select descendant from paths where ancestor = 6)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thiết kế SQL để khảo sát với các câu trả lời thuộc các kiểu dữ liệu khác nhau

  2. Điều kiện MySQL từ nhiều hàng

  3. PHP không thể phân giải tên vùng chứa mysql trong một số trường hợp nhất định

  4. Giới thiệu về các kiểu dữ liệu SQL

  5. Ứng dụng OpenShift không thể kết nối với MySQL:JDBCConnectionException:Không thể mở kết nối