Self-join
Self-join là một kiểu JOIN trong đó bảng tự JOIN với chính nó.
Bởi vì có hai bảng cùng tên nên chúng ta sẽ tạo ALIAS cho từng bảng.
Self-join dùng để mô tả các dữ liệu dạng cây có quan hệ cha con.
Ví dụ sau chúng ta lưu trữ một số thư mục và tập tin của linux.
/ (root) → bin → cat, ls → etc → hosts, mysql → usr → bin, share ↳ vim, make → var → www, log → sys → kernel
Mô tả bảng như sau:
|
|
Lấy ra tên thư mục và tên thư mục cha
Câu lệnh SQL sau sẽ lấy tên thư mục / file cùng với tên thư mục cha (không tính thư mục root
).
|
|
Dữ liệu sẽ in ra:
+--------------+--------+------+ | parrent_name | name | type | +--------------+--------+------+ | / | bin | d | | / | etc | d | | / | usr | d | | / | var | d | | / | sys | d | | bin | cat | - | | bin | ls | - | | etc | hosts | - | | etc | mysql | d | | usr | bin | d | | usr | share | d | | var | www | d | | var | log | d | | sys | kernel | d | | bin | vim | - | | bin | make | - | +--------------+--------+------+
Lấy thư mục với điều kiện nhất định
Chúng ta lấy các thư mục và file có thư mục cha có đường dẫn tuyệt đối là /bin
.
|
|
Kết quả là:
+--------------+------+------+ | parrent_name | name | type | +--------------+------+------+ | bin | cat | - | | bin | ls | - | +--------------+------+------+