SQL Server:如何从只有ID的联结表中获取数据?

时间:2015-10-05 15:26:08

标签: sql sql-server join junction-table

我有三张桌子(这里有例子)。两个有数据,一个是连接表来处理很多:很多关系。

用户

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

存储库

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

RepositoriesUsers

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

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

我有这个问题:

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

但是返回RepositroriesUsers表中的每一行。

如何将联结表与ID和其他表之间的数据与人性化文本进行匹配?

3 个答案:

答案 0 :(得分:7)

您实际上并没有为第二个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';

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

答案 1 :(得分:0)

请更改Repositories表的连接条件,并按如下所示添加WHERE子句

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

答案 2 :(得分:0)

我认为您的加入需要进行简单的更正:

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