0

MessageThreadテーブルがあります

UserUid   ThreadUid
===================
K1    111
N1    111
K1    222
K1    333
N1    444
R1    111
R1    222
D1    333
E1    444
T1    555

1つのthreadUidは、同じユーザーグループにのみ使用されます。

K1とN1は、同じThreadUidのみを持つことができます。

UserUidを知っている場合:K1とN1

K1とN1が同じThreadUidを持っているかどうかをどうやって知ることができますか?

提供されたUserUidに基づいてThreadUidを取得する方法はありますか?不可能のようです...

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

UserUidがK1で、N1の場合結果は111になります

UserUidがK1で、T1の場合結果は空になります

UserUidがN1で、E1の場合結果は444になります

4

3 に答える 3

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

SQL Fiddle の例。

于 2012-10-13T08:23:41.243 に答える
1
SELECT @ThreadUid = ThreadUid 
    FROM Users
    WHERE UserUid= @UserUid1 and ThreadUid=(Select ThreadUid From Users Where UserUid=@UserUid2)

同じでない場合は null を返し、K1 と N1 の両方が同じ ThreadUid を持っている場合は実際の ThreadUid を返します。

于 2014-10-29T11:51:43.847 に答える
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'

これにより、ThreadUidforUserID = K1とfor が異なるすべてのレコードが得られます。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'
于 2012-10-13T08:26:05.850 に答える