当前位置:网站首页>Mysql自連接查詢「建議收藏」
Mysql自連接查詢「建議收藏」
2022-06-28 16:10:00 【全棧程序員站長】
大家好,又見面了,我是你們的朋友全棧君。
自連接查詢
假想以下場景:某一電商網站想要對站內產品做層級分類,一個類別下面有若幹子類,子類下面也會有別的子類。例如數碼產品這個類別下面有筆記本,臺式機,智能手機等;筆記本,臺式機,智能手機又可以按照品牌分類;品牌又可以按照價格分類,等等。也許這些分類會達到一個很深的層次,呈現一種樹狀的結構。那麼這些數據要怎麼在數據庫中錶示呢?我們可以在數據庫中創建兩個字段來存儲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;查詢結果:
發布者:全棧程序員棧長,轉載請注明出處:https://javaforall.cn/132874.html原文鏈接:https://javaforall.cn
边栏推荐
- Slim GAIN(SGAIN)介绍及代码实现——基于生成对抗网络的缺失数据填补
- What is the difference between treasury bonds and time deposits
- A little hesitant in the morning
- 【Spock】处理 Non-ASCII characters in an identifier
- A new 25K byte from the Department showed me what the ceiling is
- Qt5.5.1配置MSVC2010编绎器和windbg调试器
- 深度学习基础汇总
- 【初学者必看】vlc实现的rtsp服务器及转储H264文件
- 平台即代码的未来是Kubernetes扩展
- Talking about open source - Linus and Jim talk about open source in China
猜你喜欢

【MySQL】表连接为什么比子查询快

Redmibook Pro 14 enhanced version cannot open delta software drastudio_ v1.00.07.52

Visual Studio 2019软件安装包和安装教程
![[proteus simulation] L297 driving stepping motor](/img/12/7902cf31f19df5d2613de7f25dca5b.png)
[proteus simulation] L297 driving stepping motor

Talking about open source - Linus and Jim talk about open source in China

Grand launch of qodana: your favorite CI code quality platform
![[recommendation system] esmm model of multi task learning (updating)](/img/21/8e38d3903eb1110efc4773edb2d09c.png)
[recommendation system] esmm model of multi task learning (updating)

今天睡眠质量记录80分

No win32/com in vs2013 help document

【高并发基础】MySQL 不同事务隔离级别下的并发隐患及解决方案
随机推荐
Geoffrey Hinton: my 50 years of in-depth study and Research on mental skills
among us私服搭建
早晨有些犹豫
tablestore中可以使用sql查询可以查出表中所有的数据吗?
[Spock] process non ASCII characters in an identifier
征文投稿丨使用轻量应用服务器搭建博客环境
Classic model transformer
Fleet | "backstage exploration" issue 3: status management
5 minutes to make a bouncing ball game
[MySQL] official website document learning query statement SQL precautions
The past and present life of distributed cap theorem
See how the interface control devaxpress WinForms creates a virtual keyboard
OpenHarmony—内核对象事件之源码详解
REDIS00_详解redis.conf配置文件
openGauss内核:SQL解析过程分析
[leetcode] 13. Roman numeral to integer
[proteus simulation] L297 driving stepping motor
Sample explanation of batch inserting data using MySQL bulkloader
机器学习之卷积神经网络Lenet5训练模型
Practice of curve replacing CEPH in Netease cloud music