mysql基础-7.多对多关心

多对多就是双向的一对多,即A表中的一行数据对应B表中的多行数据,相同的B表中的一行数据也对应A表中的多行数据。

例如文章和标签表

一篇文章有多个标签,一个标签可以关联多个文章

那么我们怎么记录这样的关系呢

文章表

idtitle
1零基础入门python开发
2零基础入门golang开发

标签表

idtitle
1python
2golang

假设,文章1的标签有1和2,我们如何表示呢?

我们很容易就能想到,通过第三张表去记录他们之间的关系

连接表

文章id标签id
11
12
create table article
(
    id    int(11) primary key auto_increment,
    title varchar(16)
);
create table tag
(
    id    int(11) primary key auto_increment,
    title varchar(16)
);
create table article_tag
(
    article_id int(11),
    tag_id     int(11),
    PRIMARY KEY (article_id, tag_id),
    foreign key (article_id) references article (id),
    foreign key (tag_id) references tag (id)
)

查询

insert into article(title)value ('入门golang开发');
insert into tag(title)values('前端'),('后端');
insert into article_tag values (1, 1),(1,2);


# 查询入门golang开发的标签有哪些
select article.title, t.title from article left join article_tag a on article.id = a.article_id left join tag t on a.tag_id = t.id where article.title = '入门golang开发';

select title from tag where id in (select article_tag.tag_id from article_tag where article_id in (select article.id from article where article.title = '入门golang开发'));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值