2015-04-17 73 views
-1

我有這樣的一個表:選擇共同colums的某些行

table: roomMembers 
roomid member 
0   User1 
0   User2 
0   User3 
1   User1 
1   User2 
1   User4 
etc... 

我需要一個SQL查詢將返回roomid其中兩個用戶X和UserY是一個成員,例如,如果我是包它的功能它看起來像:

findCommonRooms("User1", "User2"); 

在這種特定情況下它應該返回0和1

+0

您能否給我們提供您期待的輸出結果的樣本?我無法理解你想要完成什麼。 – FutbolFan

回答

1

此查詢將爲您提供'User1'和'User2'成員的roomid。

SELECT roomid 
FROM roomMembers 
WHERE member in ('User1','User2') 
GROUP BY roomid 
HAVING COUNT(1) > 1 
1

數組如果我的理解是正確的,你可以很容易地找到究竟是誰b中的成員之前在同一個房間。

CREATE TABLE roomMembers 
(
roomid int, 
member varchar(10) 
); 


INSERT INTO roomMembers VALUES (0,'Member1') 
INSERT INTO roomMembers VALUES (0,'Member2') 
INSERT INTO roomMembers VALUES (0,'Member3') 
INSERT INTO roomMembers VALUES (1,'Member1') 
INSERT INTO roomMembers VALUES (1,'Member2') 
INSERT INTO roomMembers VALUES (1,'Member4') 

這應該會給你所有的房間,多人留下來。

WITH q1 
AS (
    SELECT member 
     ,count(*) total_count 
    FROM [dbo].[roomMembers] 
    GROUP BY member 
    HAVING count(*) > 1 
    ) 
SELECT r.roomid 
    ,q1.member 
FROM q1 
JOIN dbo.roomMembers r ON r.member = q1.member 
order by r.roomid; 

希望這會有所幫助!

+0

是的,這是尋找的東西,非常感謝! –