MySql连表之多对多

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySql连表之多对多相关的知识,希望对你有一定的参考价值。

背景

每个男生和女生都可以选择自己最喜欢的几个人,可以是多个也可以使一个。

但是,在创建男生表的时候,女生表并没存在,所以不能在创表初期就在男生表中加入其喜爱的女生名单,而且名字冗余,存储浪费空间。

设计表

1、表一:man

技术分享

2、表二:woman

 技术分享

3、表三:man_to_woman

技术分享

  1. 小赵<-->小花
  2. 小赵<-->小朵
  3. 小赵<-->小楠
  4. 小孙<-->小雨
  5. 小钱<-->小楠
  6. 小李<-->小花

创建外键

技术分享

找到小赵喜欢的人

技术分享
1 SELECT
2     *
3 FROM
4     man_to_woman
5 LEFT JOIN man ON man_to_woman.man_id = man.nid
6 LEFT JOIN woman ON man_to_woman.woman_id = woman.nid
7 WHERE
8     man. NAME = "小赵"
Demo

分析SELECT * from man_to_woman LEFT JOIN man on man_to_woman.man_id = man.nid

从关系表中找到所有man中nid与关系表中的man.id相等的数据,将以man_to_woman为主,man只显示与之向对应的内容,man为字典表。

技术分享

分析LEFT JOIN woman on man_to_woman.woman_id = woman.nid

找到与上边结果中的woman_id相等的woman表中nid的所有元素,以上表为主,woman为字典表。

技术分享

分析where man.name = "小赵"

找到上边中man的name为小赵的,成功找到他的3个心仪对象

技术分享

以上是关于MySql连表之多对多的主要内容,如果未能解决你的问题,请参考以下文章

059:表关系之多对多

MyBatis注解开发之多对多查询

Hibernate关联关系之多对多

Hibernate之多对多篇

关联映射 ---- Hibernate之多对多关系

hibernate 的 关联关系之多对多 和 延迟加载