1. 程式人生 > 資料庫 >Mysql自連線查詢例項詳解

Mysql自連線查詢例項詳解

本文例項講述了Mysql自連線查詢。分享給大家供大家參考,具體如下:

自連線查詢

假想以下場景:某一電商網站想要對站內產品做層級分類,一個類別下面有若干子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,桌上型電腦,智慧手機等;筆記本,桌上型電腦,智慧手機又可以按照品牌分類;品牌又可以按照價格分類,等等。也許這些分類會達到一個很深的層次,呈現一種樹狀的結構。那麼這些資料要怎麼在資料庫中表示呢?我們可以在資料庫中建立兩個欄位來儲存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('家用產品',parent_id) values('筆記本',1);
insert into tdb_cates(cate_name,parent_id) values('智慧手機',parent_id) values('電器',2);
insert into tdb_cates(cate_name,parent_id) values('傢俱',parent_id) values('冰箱',5);
insert into tdb_cates(cate_name,parent_id) values('洗衣機',parent_id) values('汽車品牌',parent_id) values('別克',9);
insert into tdb_cates(cate_name,parent_id) values('寶馬',parent_id) values('雪佛蘭',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,p.cate_name from tdb_cates s left join tdb_cates p on p.parent_id=s.id;

查詢結果:

更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL查詢技巧大全》、《MySQL常用函式大彙總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧彙總》、《MySQL儲存過程技巧大全》及《MySQL資料庫鎖相關技巧彙總》

希望本文所述對大家MySQL資料庫計有所幫助。