SQL查询以确定不同的行是否具有相同的第二列
我有一张MessageThread表SQL查询以确定不同的行是否具有相同的第二列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一张MessageThread表 UserUid ThreadUid =================== K1 111 N1 111 K1 222 K1 333 N1 444 R1 111 R1 222 D1 333 E1 444 T1 555 一个threadUid仅用于同一组用户 上的K1和N1只能具有相同的ThreadUid 如果我知道UserUid:K1和N1 我如何知道K1和N1是否具有相同的ThreadUid
UserUid ThreadUid
===================
K1 111
N1 111
K1 222
K1 333
N1 444
R1 111
R1 222
D1 333
E1 444
T1 555
一个threadUid仅用于同一组用户
上的K1和N1只能具有相同的ThreadUid
如果我知道UserUid:K1和N1
我如何知道K1和N1是否具有相同的ThreadUid
有没有办法根据提供的UserUid获取ThreadUid?似乎不可能
------------
如果UserUid是K1和N1
结果将是111
如果UserUid是K1和T1
结果将为空
如果UserUid是N1和E1
结果将是444,以查找两个用户有共同点的线程:
select mt1.ThreadUid
, count(*) as ThreadCount
, (
select count(distinct mt3.UserUid)
from MessageThread mt3
where mt1.ThreadUid = mt1.ThreadUid
) as UsersInThread
from MessageThread mt1
join MessageThread mt2
on mt1.ThreadUid = mt2.ThreadUid
where mt1.UserUid = 'K1'
and mt2.UserUid = 'N1'
group by
mt1.ThreadUid
要查找两个用户有共同点的线程,请执行以下操作:
select mt1.ThreadUid
, count(*) as ThreadCount
, (
select count(distinct mt3.UserUid)
from MessageThread mt3
where mt1.ThreadUid = mt1.ThreadUid
) as UsersInThread
from MessageThread mt1
join MessageThread mt2
on mt1.ThreadUid = mt2.ThreadUid
where mt1.UserUid = 'K1'
and mt2.UserUid = 'N1'
group by
mt1.ThreadUid
这可能会起作用(这未经测试):-
这可能会起作用(这未经测试):-
如果不相同,则返回null;如果K1和N1具有相同的ThreadUid,则返回实际ThreadUid
如果不相同,将返回null;如果K1和N1具有相同的ThreadUid,将返回实际ThreadUidOP想知道哪些UserID=K1/N1的行没有相同的ThreadID,这似乎是不允许的。如果我还需要作为另一列的总计数,我该怎么办?@tianxu0836:你可以使用
分组方式
而不是不同的
,添加到answer中,但它不会得到这个结果:ThreadUid-111;线程数-3。计数应为此线程中的用户总数uid@tianxu0836:查询添加到answerOP的总用户数想要知道哪些UserID=K1/N1的行没有相同的ThreadID,这似乎是不允许的。如果我还需要总计数作为另一个列,我该怎么办?@tianxu0836:您可以使用分组依据
,而不是不同的
,添加到answer,但不会得到以下结果:ThreadUid-111;线程数-3。计数应为此线程中的用户总数uid@tianxu0836:查询添加到answerExample结果中的总用户数将有助于--很难说清您的要求。Example结果将有助于--很难说清您的要求。
SELECT ms1.UserUid, distinct ms1.ThreadUid, ms2.UserUid, ms2.ThreadUid
FROM MessageThread ms1, MessageThread ms2
WHERE ms1.ThreadUid = ms2.ThreadUid AND
ms1.UserUid = 'K1' AND ms2.UserUid = 'N1'
SELECT @ThreadUid = ThreadUid
FROM Users
WHERE UserUid= @UserUid1 and ThreadUid=(Select ThreadUid From Users Where UserUid=@UserUid2)