2015-09-07 3 views
0

У меня есть база данных MySQL, где у меня есть таблица User, Project и ProjectUser. Таблица ProjectUser имеет идентификатор UserID и ProjectID и отображает пользователя в проект. Я хочу иметь возможность запрашивать, какие проекты имеют два разных пользователя. Поэтому, если Боб принадлежит проектам A, B, C, D и Joe, они принадлежат проектам C, D, E, F ... тогда я хочу ВЫБРАТЬ информацию для проектов C и D, когда я знаю UserID Боба и Джо.SQL выбирает пользователей, принадлежащих к одному и тому же объекту

ответ

0

Вы можете выбрать проекты для userId1 и userId2 отдельно и, наконец, пересекая их, вы найдете проекты, в которых есть эти два пользователя! Для SQL сервера

select * from projects where PID IN 
(select PID from ProjectUser PU1 where UserId = UserID1 
INTERSECT 
select PID from ProjectUser PU2 where UserId = UserID2) 

и MYSQL вы пишете следующим образом:

select * from projects where PID IN 
    (select PID from ProjectUser PU1 where UserId = UserID1 and 
      PID In (select PID from ProjectUser PU2 where UserId = UserID2)) 
+0

Это будет работать, но я использую базу данных MySQL и не поддерживает INTERSECT. –

1

Предположим, что это метаданные и примеры, предоставленные вами.

create table User  (UserID int, Name varchar(200)); 
create table Project  (ProjectID int, Name varchar(200), Information varchar(200)); 
create table ProjectUser (UserID int, ProjectID int ); 

INSERT INTO User  VALUE (1,'Bob'),(2,'Joe'); 
INSERT INTO Project  VALUE (1,'A','First'),(2,'B','Second'),(3,'C','Third'),(4,'D','Fourth'),(5,'E','Fifth'),(6,'F','Sixth'); 
INSERT INTO ProjectUser VALUE (1,1),(1,2),(1,3),(1,4),(2,3),(2,4),(2,5),(2,6); 

Предполагая, что записи в ProjectUser таблицы уникальны UserID и ProjectID, вы можете получить подробную информацию о проектах Боб и Джо акцию по:

SELECT Project.* FROM Project WHERE Project.ProjectID IN 
(
    SELECT Project.ProjectID 

    FROM ProjectUser 

    INNER JOIN User 
    ON User.UserID  = ProjectUser.UserID 

    INNER JOIN Project 
    ON Project.ProjectID = ProjectUser.ProjectID 

    WHERE User.Name IN ('Bob','Joe') 

    GROUP BY Project.ProjectID 

    HAVING COUNT(*) > 1 
) 

Попробуйте на http://sqlfiddle.com/

Смежные вопросы