我有三张桌子:users, projects, user_project
user_project
包含user_id, project_id
和role_id
,其中user_id
和project_id
都是与projects.project_id
和users.user_id
相关联的主键
我想从users
表到projects
表到user_project
获取SELECT
users.name, users.surname
FROM users
WHERE users.user_id = user_project.user_id AND projects.project_id = @parameter
表中所有用户的姓名和姓氏。
我必须使用哪种SQL语句?我在想这样的事情:
{{1}}
我使用的是SQL Server 2012和ASP.NET / VB.NET。
Db图:
答案 0 :(得分:2)
SELECT users.name, users.surname
FROM users u
INNER JOIN user_project up
ON u.user_id = up.user_id
WHERE up.project_id = @parameter
答案 1 :(得分:1)
SELECT
users.name, users.surname
FROM users
inner join user_project
on users.user_id = user_project.user_id
WHERE user_project.project_id = @parameter
答案 2 :(得分:1)
这应该这样做。
SELECT users.name, users.surname
FROM users
INNER JOIN user_project ON user_project.user_id = users.user_id
WHERE (user_project.project_id = @parameter)
这里的重要一行是INNER JOIN
开始的行。由于project
列位于project_id
,因此您不需要user_project
表。例如,如果您想获取项目名称,则需要project
表。您可以通过编写另一个INNER JOIN
来完成此操作。
INNER JOIN project ON project.project_id = user_project.project_id
现在您已加入,您可以访问project
表中的所有列。
答案 3 :(得分:1)
您需要加入到其他表格 - 从Users
到User_Project
一直到Projects
,如果您想要作为选择的基础关于Projects
表中的某些内容:
SELECT
u.name, u.surname
FROM users u
INNER JOIN user_project up ON u.user_id = up.user_id
INNER JOIN project p ON p.project_id = up.project_id
WHERE p.project_name = 'something'
或至少在链接表中,如果您可以使用project_id
作为标准:
SELECT
u.name, u.surname
FROM users u
INNER JOIN user_project up ON u.user_id = up.user_id
WHERE up.project_id = @parameter
更新:假设您的Role
表再次通过链接表Users
连接到Users_role
,那么您还需要选择角色名称:< / p>
SELECT
u.name, u.surname,
RoleName = r.Name
FROM users u
INNER JOIN user_project up ON u.user_id = up.user_id
INNER JOIN user_roles ur ON u.user_id = ur.user_id
INNER JOIN role r ON ur.role_id = r.role_id
WHERE up.project_id = @parameter