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 的联结表中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

Spring:如何从联结表中删除条目?

如何从MS SQL Server 2012中的不同表中减去连续的行?

从联结表中选择一定数量的行

如何使用 SQL Server 返回不在表中的 id

SQL n:n - 联结表中查询的最佳实践

1 小时 SQL 极速入门