SQL Server:如何从只有 ID 的联结表中获取数据?
Posted
技术标签:
【中文标题】SQL Server:如何从只有 ID 的联结表中获取数据?【英文标题】:SQL Server: How can I get data from junction table that only has IDs? 【发布时间】:2015-10-05 15:26:08 【问题描述】:我有三个表(这里是例子)。两个带有数据,一个是用于处理多对多关系的联结表。
用户:
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 的联结表与带有人性化文本的其他表之间匹配数据?
【问题讨论】:
我知道你在下面有一些很好的答案,但如果你从你正在过滤的桌子开始并一直往下走,它可能对你更有意义。from Repositories r join RepositoriesUsers ru on r.Id = ru.RepositoryID join Users u on ru.UserId = u.Id where r.RepositoryURI = 'http://another
【参考方案1】:
您实际上并没有为您的第二个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';
此外,为了清楚起见,您应该尝试在查询中使用表别名。
【讨论】:
完美。谢谢你。我知道现在发生了什么。我会在七分钟内接受你的回答:)【参考方案2】:我认为您的加入需要进行简单的更正:
select UserName
from RepositoriesUsers
join Users on Users.ID = RepositoriesUsers.UserID
join Repositories on Repositories.ID = RepositoriesUsers.RepositoryID
where Repositories.RepositoryURI = 'http://another';
【讨论】:
这是正确的,但这个答案已经由 Lamak 提交。【参考方案3】:请更改 Repositories 表的连接条件并添加 WHERE 子句,如下所示
select *
from RepositoriesUsers
join Users on Users.ID = RepositoriesUsers.UserID
join Repositories on Repositories.ID = RepositoriesUsers.RepositoryID
where RepositoryURI = 'http://another'
【讨论】:
这是正确的,但这个答案已经由 Lamak 提交。以上是关于SQL Server:如何从只有 ID 的联结表中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章