我有一个包含用户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?
例如,在这里,请回复我:
我尝试使用DISTINCT和LEFT JOIN,但我找不到如何只使用一个表...
由于
答案 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;