Mysql:一个表的一个字段与另一个表的两个字段之间的多重关系

Posted

技术标签:

【中文标题】Mysql:一个表的一个字段与另一个表的两个字段之间的多重关系【英文标题】:Mysql: Multiple relations between one field of a table and two fields from another table 【发布时间】:2018-06-13 10:19:28 【问题描述】:

我尝试尽可能简单地解释它。 假设我的 MySql/MariaDB 数据库中有 2 个表。

人(身份证,姓名) 身份证名称 0 约翰 1 杰克 2简 3 百合 4 露丝 …… 关系(id1,id2,rel) ID1 ID2 相对 0 1 父亲 1 0 儿子 3 0 老板 2 3 女儿 3 2 妈妈 …………

第一个表包含一些人的名字,第二个包含人与人之间的关系,每一行告诉我两个人之间的关系来自表PEOPLE)。 例如表RELATIONSHIP 的第一行告诉我John (ID 0)Jack (ID 1) 的父亲。

我如何编写一个查询来提供下表?

ID1 名称1 ID2 名称2 相对 0 约翰 1 杰克父亲 1 杰克 0 约翰的儿子 3 莉莉 0 约翰 老板 2简3莉莉女儿 3百合2简妈妈 ……………………

是否可以只使用一个查询? 我不知道如何将join ID1ID2 都添加到表 PEOPLE 的不同行。

这些表只是解释我需要的示例。

提前致谢!

【问题讨论】:

需要引用并加入PEOPLE两次;对表的每个引用都需要一个不同的别名,并且从它们引用的字段需要由别名限定。 【参考方案1】:

您只需使用两个joins:

select r.*, p1.name as name1, p2.name as name2
from relationship r join
     people p1
     on r.id1 = p1.id join
     people p2
     on r.id2 = p2.id;

【讨论】:

伙计……我意识到我的问题有多愚蠢……非常感谢! :-)【参考方案2】:

只需使用 2 个连接。

SELECT 
  r1.ID as ID1, 
  r1.NAME as NAME1, 
  r2.ID as ID2, 
  r2.NAME as NAME2,
  relationship.REL as REL
FROM relationship 
  JOIN PEOPLE as r1 ON relationship.ID1 = r1.ID
  JOIN PEOPLE as r2 ON relationship.ID2 = r2.ID

【讨论】:

伙计……我意识到我的问题有多愚蠢……非常感谢! :-)

以上是关于Mysql:一个表的一个字段与另一个表的两个字段之间的多重关系的主要内容,如果未能解决你的问题,请参考以下文章

mysql外键(FOREIGNKEY)介绍及使用注意事项

mysql外键详解

mysql如何把一个表的字段赋值到另一张表?

mysql外键实战

mysql如何把同一张表的一个字段内的内容复制到另一个字段里

MySQL基础之表的管理