2015-09-07 40 views
0

我有一個MySQL數據庫設置,我有一個用戶,項目和ProjectUser表。 ProjectUser表具有用戶標識和項目標識並將用戶映射到項目。我希望能夠查詢兩個不同用戶共同擁有的項目。所以如果Bob屬於項目A,B,C,D和Joe屬於項目C,D,E,F ...那麼當我知道Bob和Joe的用戶ID時,我想選擇項目C和D的信息。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

假設這是元數據和您提供的例子。

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/

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表中的記錄是唯一由用戶名專案編號,你可以得到的項目鮑勃和喬份額的細節