2012-06-29 3 views
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 

Okey! 저는 사람들에게 메시지를 보낼 수있는 메시징 시스템을 구축하고 있습니다. 하지만 나는이 SQL 쿼리를 사용하여 어떤 사용자에게 메시지를 보낼지에 따라 sessionID를 찾을 수있다.SQL 복수 행 일치

예를 들어

: 내가 (아이디 : 1) 경우 사용자 ID 2에 메시지를 보내, SQL 쿼리가 sessionID와 반환해야합니다 : 나는 아이디 2와 3에 메시지를 보낼 경우 1

, 그것은 반환 sould는 : 세션 ID : 3

MSSQL을 사용하여 단일 sql 쿼리로이 작업을 수행 할 수 있습니까?

+0

다양한 열의 역할을 정의하십시오. 왜 세션 ID 1을 반환해야합니까? UserID 1에 대해 sessionID 3 대신 UserID 2에 메시지를 보내시겠습니까? –

+0

@ JohnMitchell sessionid 3에 사용자 1과 2가 할당되지 않았으며 세션 ID 1에서만 작동합니다. –

답변

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 
+0

두 명의 사용자와 잘 작동합니다! 하지만 더 많은 사용자를 추가하려면 어떻게해야합니까? 도움에 감사드립니다! – user1490792

+0

@ user1490792 완료, 전체 예제를 넣었습니다 :) 작동하는 경우 대답을 수락해야합니다. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

0
 

    SELECT TOP 1 sessionID_Ref 
    FROM   table AS table_2 
    WHERE  (userID_Ref = 28 OR 
          userID_Ref = 11) AND 
           ((SELECT  COUNT(*) AS Expr1 
            FROM   table 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   table AS table_1 
            WHERE  (sessionID_Ref = table_2.sessionID_Ref)) = 2) 

이 작동하지만, 더 빠른 방법이 있어야합니다 ....