2015-12-14 4 views
6

से एक पंक्ति ढूँढना मैं दो तालिकाओं conversations और users वे पाइवट टेबल conversation_user जो एक user_id और एक conversation_id कॉलम होता है के साथ बंधे हुए हैं कहा जाता है।पाइवट टेबल

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

मैं डेटाबेस को कुछ उपयोगकर्ता आईडी भेजना चाहता हूं और बातचीत को एक साथ प्राप्त करना चाहता हूं।

उदाहरण के लिए:

जब मैं 1 और 2 भेज मैं, conversation_id 1 प्राप्त करना चाहिए जब मैं 1, 2 और 3 भेज मैं conversation_id 2 प्राप्त करना होगा।

मैं ऐसी क्वेरी कैसे लिख सकता हूं?

उत्तर

3

आप उपयोग कर सकते हैं GROUP BY और HAVING:

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

1 के लिए और 2:

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

यह काम किया :) धन्यवाद –

संबंधित मुद्दे