我有三张桌子(这里有例子)。两个有数据,一个是连接表来处理很多:很多关系。
用户:
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和其他表之间的数据与人性化文本进行匹配?
答案 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';