2015-12-14 9 views
6

から1行を見つけます。Iは<code>conversations</code>と<code>users</code>それらは<code>user_id</code>と<code>conversation_id</code>列を含むピボットテーブル<code>conversation_user</code>と結合されていると呼ばれる2つのテーブルを持っているピボットテーブル

| conversation_id | user_id | 
|-----------------|---------| 
|    1 |  1 | 
|    1 |  2 | 
|    2 |  1 | 
|    2 |  2 | 
|    2 |  3 | 

私はデータベースにいくつかのユーザーIDを送信すると、彼らは一緒にいる会話を取得します。例えば

私は私が123を送信するとき、私はconversation_id 2を受けなければならない、conversation_id 1を受けなければならない12を送信

どのようにこのようなクエリを書くことができますか?

答えて

3

あなたがGROUP BYHAVINGを使用することができます。

1と2については
SELECT conversation_id 
FROM tab      -- subquery/temp table/whatever 
GROUP BY conversation_id 
HAVING SUM(user_id = 1) > 0 
    AND SUM(user_id = 2) > 0 
    AND SUM(user_id = 3) > 0 
    AND SUM(user_id NOT IN (1,2,3)) = 0 

SqlFiddleDemo

SELECT conversation_id 
FROM tab 
GROUP BY conversation_id 
HAVING SUM(user_id = 1) > 0 
    AND SUM(user_id = 2) > 0 
    AND SUM(user_id NOT IN (1,2)) = 0 
+1

**ありがとう、たくさん!** –

0

GROUP_CONCATがあなたの要件ごとの結果を取得するために使用することができます。それに応じて条件節条件を変更することができます:

SELECT conversion_id 
FROM (
    SELECT 
    conversion_id, 
    group_concat(user_id, ',') 
    FROM conversions 
    HAVING group_concat(user_id, ',') = '1,2,3' 
    GROUP BY conversion_id 
) 
+0

ありがとう –

関連する問題

 関連する問題