mysql自連線例項 Mysql自連線查詢例項詳解

2021-10-17 16:50:26 字數 1958 閱讀 8463

自連線查詢

假想以下場景:某一電商**想要對站內產品做層級分類,乙個類別下面有若干子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,台式電腦,智慧型手機等;筆記本,台式電腦,智慧型手機又可以按照品牌分類;品牌又可以按照**分類,等等。也許這些分類會達到乙個很深的層次,呈現一種樹狀的結構。那麼這些資料要怎麼在資料庫中表示呢?我們可以在資料庫中建立兩個欄位來儲存id和類別名稱,使用第三個字段儲存類別的子類或者父類的id,最後通過自連線去查詢想要的結果。

自連線查詢其實等同於連線查詢,需要兩張表,只不過它的左表(父表)和右表(子表)都是自己。做自連線查詢的時候,是自己和自己連線,分別給父表和子表取兩個不同的別名,然後附上連線條件。看下面的例子:

1. 建立資料表:

create table tdb_cates(

id smallint primary key auto_increment,

cate_name varchar(20) not null,

parent_id smallint not null

注:cate_name表示分類的名稱,parent_id表示父類的id。

2. 插入資料:

insert into tdb_cates(cate_name, parent_id) values('數碼產品', 0);

insert into tdb_cates(cate_name, parent_id) values('家用產品', 0);

insert into tdb_cates(cate_name, parent_id) values('筆記本', 1);

insert into tdb_cates(cate_name, parent_id) values('智慧型手機', 1);

insert into tdb_cates(cate_name, parent_id) values('電器', 2);

insert into tdb_cates(cate_name, parent_id) values('家具', 2);

insert into tdb_cates(cate_name, parent_id) values('冰箱', 5);

insert into tdb_cates(cate_name, parent_id) values('洗衣機', 5);

insert into tdb_cates(cate_name, parent_id) values('汽車品牌', 0);

insert into tdb_cates(cate_name, parent_id) values('別克', 9);

insert into tdb_cates(cate_name, parent_id) values('寶馬', 9);

insert into tdb_cates(cate_name, parent_id) values('雪佛蘭', 9);

insert into tdb_cates(cate_name, parent_id) values('家紡', 0);

查詢結果:

3. 查詢所有分類以及分類的父類:假想有左右兩張表(都是tdb_cates),左表是子表,右表是父表;查詢子表的id,子表的cate_name,父表的cate_name;連線條件是子表的parent_id等於父表的id。

select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on s.parent_id=p.id;

查詢結果:

4. 查詢所有分類以及分類的子類:還是假想有左右兩張表(都是tdb_cates),左表是子表,右表是父表;查詢子表的id,子表的cate_name,父表的cate_name;連線條件是子表的id等於父表的parent_id。

select s.id, s.cate_name, p.cate_name from tdb_cates s left join tdb_cates p on p.parent_id=s.id;

查詢結果:

Mysql自連線查詢例項詳解

自連線查詢 假想以下場景 某一電商 想要對站內產品做層級分類,乙個類別下面有若干子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,台式電腦,智慧型手機等 筆記本,台式電腦,智慧型手機又可以按照品牌分類 品牌又可以按照 分類,等等程式設計客棧。也許這些分類會達到乙個很深的層次,呈現一種樹...

mysql自連線查詢 Mysql自連線查詢例項詳解

自連線查詢 假想以下場景 某一電商 想要對站內產品做層級分類,乙個類別下面有若干子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,台式電腦,智慧型手機等 筆記本,台式電腦,智慧型手機又可以按照品牌分類 品牌又可以按照 分類,等等。也許這些分類會達到乙個很深的層次,呈現一種樹狀的結構。那...

mysql 自動連線 mysql 自連線

自連線 自連線是一種特殊的表連線,它是指相互連線的表在物理上同為一張表,但是邏輯上是多張表。自連線通常用於表中的資料有層次結構,如區域表 選單表 商品分類表等。自連線語法 select a.column,b.column from table a,table b where a.column b.c...