繁体   English   中英

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

[英]SQL query to find out if different rows with same 2nd columns

我有一个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

SQL Fiddle中的示例。

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

如果不相同,将返回null;如果K1和N1都具有相同的ThreadUid,则将返回实际的ThreadUid

这可能有效( 未经测试 ):-

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'

这将为您提供所有记录,这些记录对于UserID = K1UserID = N1具有不同的ThreadUid

似乎这样可能会给您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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM