2
relationID     sessionID_Ref     userID_Ref
1              1                 1
2              1                 2
3              2                 1
4              2                 3
5              3                 1
6              3                 2
7              3                 3

オーケー!人々のグループにメッセージを送信できるメッセージング システムを構築しています。しかし、メッセージを送信するユーザーに応じて、sessionID を検索するこの SQL クエリに行き詰まっています。

例: I (userID: 1) が userID 2 にメッセージを送信すると、SQL クエリは sessionID: 1 を返す必要があります。

userID 2 と 3 にメッセージを送信すると、sould return: sessionID: 3

MSSQL を使用して、単一の SQL クエリでこれを行うことはできますか?

4

2 に答える 2

3

おそらく次のようなものです:

select sessionID_Ref
from tablename
group by sessionID_Ref
having count(distinct userID_Ref) = 2
   and min(userID_Ref) = 1
   and max(userID_Ref) = 2

完全な例を次に示します。

create table #tablename (
    relationID int,
    sessionID_Ref int,
    userID_Ref int
)

insert into #tablename values(1,1,1)
insert into #tablename values(2,1,2)
insert into #tablename values(3,2,1)
insert into #tablename values(4,2,3)
insert into #tablename values(5,3,1)
insert into #tablename values(6,3,2)
insert into #tablename values(7,3,3)


create table #users (
    users int
)

insert into #users values(1)
insert into #users values(3)


select t.sessionID_Ref from #tablename t
inner join #users u on t.userID_Ref = u.users
inner join (
    select t.sessionID_Ref
    from #tablename t
    group by t.sessionID_Ref
    having COUNT(t.userID_Ref) = (select COUNT(*) from #users)
) aux on aux.sessionID_Ref = t.sessionID_Ref
group by t.sessionID_Ref
having COUNT(t.userID_Ref) = (select COUNT(*) from #users)


drop table #tablename
drop table #users
于 2012-06-29T09:37:50.690 に答える
0
    トップ 1 を選択 sessionID_Ref
    FROM テーブル AS table_2
    WHERE (userID_Ref = 28 または
                          userID_Ref = 11) AND
                              ((SELECT COUNT(*) AS Expr1
                                  FROM テーブル AS table_1
                                  WHERE (sessionID_Ref = table_2.sessionID_Ref) AND (userID_Ref = 28) OR
                                                        (sessionID_Ref = table_2.sessionID_Ref) AND (userID_Ref = 11)) = 2) AND
                              ((SELECT COUNT(*) AS Expr1
                                  FROM テーブル AS table_1
                                  WHERE (sessionID_Ref = table_2.sessionID_Ref)) = 2)

これは機能しますが、もっと速い方法があるはずです....

于 2012-06-29T12:39:26.880 に答える