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

好吧!我正在构建一个可以向一群人发送消息的消息传递系统。但是我坚持使用这个 SQL 查询,根据我发送消息的用户,在哪里可以找到 sessionID。

例如:如果我 (userID: 1) 向 userID 2 发送消息,SQL Query 应该返回 sessionID: 1

如果我向用户 ID 2 和 3 发送消息,它会返回: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) 和
                              ((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 回答