SQL查询以确定不同的行是否具有相同的第二列

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

我有一张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?似乎不可能

------------ 如果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,将返回实际ThreadUid

OP想知道哪些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)