使用一个SQL语句查询2/3表

时间:2013-04-08 20:52:16

标签: asp.net sql vb.net sql-server-2012

我有三张桌子:users, projects, user_project

user_project包含user_id, project_idrole_id,其中user_idproject_id都是与projects.project_idusers.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图:

enter image description here

http://i.imgur.com/lrv52wO.png

4 个答案:

答案 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)

您需要加入到其他表格 - 从UsersUser_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