SQL 中同一个表的两个联接

Web*_*ner 5 alias

我有 2 个 SQL 表:NAMES并且RELATIONSHIPS目前NAMES只有 2 列:namename_id。另一个是表中人与人之间的关系列表NAMES。它有 3 列:primaryperson_idrelatedperson_idrelationship_id。和primaryperson_id是表中related_person_id的。中的每个人都可以在 的主要列或相关列中拥有多个条目(这是多对多关系吗?)。name_idNAMESNAMESRELATIONSHIPS

此查询有效:

SELECT  people.name AS 'primary', relationships.related_person_id AS relatedto
FROM relationships
JOIN people
ON people.name_id=relationships.primary_person_id 
ORDER BY people.name_id;
Run Code Online (Sandbox Code Playgroud)

但我想在relatedto列中显示名称(即文本)而不是 ID 号。我怎样才能做到这一点?

Dan*_*her 4

您可以在连接表时指定表别名,就像使用列名一样。它不仅节省了您大量的输入,而且使代码更具可读性,并且解决了两次连接同一个表的问题。

SELECT p1.name AS "primary",
       relationships.related_person_id AS relatedto,
       p2.name AS related_name
FROM people AS p1
INNER JOIN relationships AS r
    ON p1.name_id=r.primary_person_id 
INNER JOIN people AS p2
    ON p2.name_id=r.related_person_id 
ORDER BY p1.name_id;
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我已将p1和分配p2people表和rrelationships

注意:某些数据库平台不喜欢“AS”关键字。如果您愿意,您可以完全跳过“AS”,如下所示:

...
FROM people p1
INNER JOIN relationships r
...
Run Code Online (Sandbox Code Playgroud)