SQL 服务器:如何从只有 ID 的联结点 table 获取数据?

SQL Server: How can I get data from junction table that only has IDs?

我有三个 table(此处为示例)。两个带有数据,一个是连接 table 以处理 many:many 关系。

用户

ID | UserName
====================
1  | Jeremy Coulson
2  | Someone Else

存储库:

ID | RepositoryURI
====================
1  | http://something
2  | http://another

存储库用户:

ID | UserID | RepositoryID
==========================
1  | 1      | 1
2  | 2      | 2

因此,在此示例中,用户 1 与存储库 1 关联。用户 2 与存储库 2 关联。我现在需要按 Repositories.RepositoryURI 和 return Users.UserName 进行搜索。

我有这个查询:

select UserName 
from RepositoriesUsers 
join Users on Users.ID = RepositoriesUsers.UserID
join Repositories on Repositories.RepositoryURI = 'http://another';

但是 return 是 RepositroriesUsers table 中的每一行。

如何匹配带有 ID 的联结点 table 和带有人性化文本的其他 table 之间的数据?

您实际上并没有为第二个 INNER JOIN 提供正确的加入条件。应该是:

SELECT U.UserName 
FROM RepositoriesUsers RU
INNER JOIN Users U 
    ON U.ID = RU.UserID
INNER JOIN Repositories R 
    ON RU.RepositoryID = R.ID
WHERE R.RepositoryURI = 'http://another';

此外,为了清楚起见,您应该尝试在查询中使用 table 别名。

请更改 Repositories 的加入条件 table 并添加如下 WHERE 子句

select *
from RepositoriesUsers 
join Users on Users.ID = RepositoriesUsers.UserID
join Repositories on Repositories.ID = RepositoriesUsers.RepositoryID
where RepositoryURI = 'http://another'

我认为您的加入需要一个简单的更正:

select UserName 
from RepositoriesUsers  
join Users on Users.ID = RepositoriesUsers.UserID
join Repositories on Repositories.ID = RepositoriesUsers.RepositoryID
where Repositories.RepositoryURI = 'http://another';