我有 2 个 SQL 表:NAMES并且RELATIONSHIPS目前NAMES只有 2 列:name和name_id。另一个是表中人与人之间的关系列表NAMES。它有 3 列:primaryperson_id、relatedperson_id和relationship_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 号。我怎样才能做到这一点?
您可以在连接表时指定表别名,就像使用列名一样。它不仅节省了您大量的输入,而且使代码更具可读性,并且解决了两次连接同一个表的问题。
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和分配p2给people表和r表relationships。
注意:某些数据库平台不喜欢“AS”关键字。如果您愿意,您可以完全跳过“AS”,如下所示:
...
FROM people p1
INNER JOIN relationships r
...
Run Code Online (Sandbox Code Playgroud)