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

时间:2018-01-03 17:45:02

标签: mysql database join mariadb

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

PEOPLE (id,name)

ID  NAME
0   John
1   Jack
2   Jane
3   Lily
4   Ruth
... ...

RELATIONSHIP (id1,id2,rel)

ID1  ID2  REL
0    1    father
1    0    son
3    0    boss
2    3    daughter
3    2    mother
...  ...  ...

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

如何编写一个给我下表的查询?

ID1  NAME1  ID2  NAME2  REL
0    John   1    Jack   father
1    Jack   0    John   son
3    Lily   0    John   boss
2    Jane   3    Lily   daughter
3    Lily   2    Jane   mother
...  ...    ...  ...    ...

只有一个查询可以吗? 我无法弄清join ID1 ID2PEOPLE对不同行p->A::foo()行的方式。

这个表只是解释我需要的一个例子。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您只需使用两个join s:

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;

答案 1 :(得分: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