SQL左连接在一个没有重复

时间:2017-10-01 18:28:10

标签: mysql sql left-join

我有一个包含用户ID和项目ID的联结表: 每个用户都可以参与多个项目。

id|UserID |ProjectID|
1 |      1|      2  |
2 |      2|      3  |
3 |      1|      3  |
4 |      3|      4  |
5 |      3|      2  |
6 |      3|      3  |
7 |      4|      5  |

是否可以使用单个sql请求返回与我在同一项目中的所有用户ID?

例如,在这里,请回复我:

  • 用户3,因为他和我在项目2和3中
  • 用户2,因为他和我在项目3中

我尝试使用DISTINCT和LEFT JOIN,但我找不到如何只使用一个表...

由于

3 个答案:

答案 0 :(得分:0)

通常有几种方法可以在sql中实现这样的功能。第一种方法是我写的方法,只是为了向您展示另一种思考方法。我还写了一个左连接,因为你试图向你展示这个方法。

方法#1

SELECT DISTINCT UserID
FROM Table
WHERE ProjectID IN (SELECT DISTINCT ProjectID FROM Table WHERE UserID = me)

方法#2

SELECT DISTINCT others.UserID
FROM Table myself
LEFT JOIN Table others ON myself.ProjectID = others.ProjectID
WHERE myself.UserID = me

答案 1 :(得分:0)

现在想不出更好的事情

declare @searchingId int;
set @searchingId = 1

select distinct t2.UserId
from 
    (select t1.ProjectId 
    from [Table] as t1 
    where t1.UserId = @searchingId) as projects
    join [Table] as t2 on projects.ProjectId = t2.ProjectId
    where t2.UserId != @searchingId

答案 2 :(得分:0)

我会使用简单的join

select distinct upr.userid
from userprojects upr join
     userprojects upr2
     on upr2.projectid = upr.projectid and
        upr2.userid = @me;

如果您想计算匹配项目的数量,请使用group by

select upr.userid, count(*)
from userprojects upr join
     userprojects upr2
     on upr.projectid = upr.projectid and
        upr2.userid = @me
group by upr.userid;