1

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

user_project包含user_id, project_idand role_id,其中user_idproject_id都是连接到projects.project_idand的主键users.user_id

我想从表中获取与某个项目有关的所有用户的姓名和users姓氏。projectsuser_project

我必须使用什么 SQL 语句?我在想这样的事情:

SELECT 
    users.name, users.surname 
FROM users 
WHERE users.user_id = user_project.user_id AND projects.project_id = @parameter

我正在使用 SQL Server 2012 和 ASP.NET/VB.NET。

数据库图:

在此处输入图像描述

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

4

4 回答 4

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
于 2013-04-08T20:58:54.693 回答
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
于 2013-04-08T20:58:44.130 回答
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

于 2013-04-08T20:59:03.563 回答
1

您需要加入其他表格 - 从Users一直User_ProjectProjects如果您想根据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_idas 条件:

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

更新:假设您的RoleUsers再次通过链接表连接,Users_role那么您也需要它来选择角色名称:

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
于 2013-04-08T20:59:53.353 回答