SQL查询以查明具有相同第二列的不同行

时间:2012-10-13 08:20:36

标签: 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?似乎不可能......

------------

如果UserUid是K1和N1 结果将是111

如果UserUid是K1和T1 结果将为空

如果UserUid是N1和E1 结果将是444

3 个答案:

答案 0 :(得分:2)

查找两个用户共有的线程:

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

Example at SQL Fiddle.

答案 1 :(得分:1)

SELECT @ThreadUid = ThreadUid 
    FROM Users
    WHERE UserUid= @UserUid1 and ThreadUid=(Select ThreadUid From Users Where UserUid=@UserUid2)

如果它不相同则返回null并且如果K1和N1具有相同的ThreadUid将返回实际的ThreadUid

答案 2 :(得分:0)

这可能有用(这不是经过测试): -

SELECT ms1.UserUid, ms1.ThreadUid, ms2.UserUid, ms2.ThreadUid 
FROM MessageThread ms1, MessageThread ms2
WHERE ms1.ThreadUid <> ms2.ThreadUid AND
ms1.UserUid = 'K1' AND ms2.UserUid = 'N1'

这将为您提供所有记录,ThreadUidUserID = K1

UserID = N1不同

似乎这样可能会给你duplicate记录。请检查并恢复。我没有安装sql-server所以无法测试它。

或者更好,您可以返回具有相同ThreadUid 的记录: -

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'