2011-11-09 17 views
8

अभी भी MySQL रस्सियों को सीखना और मैं यह जानने का प्रयास कर रहा हूं कि एक से अधिक से अधिक विशिष्ट चयन कैसे करें। मैं क्षमा चाहता हूं कि तालिका के नाम बहुत सामान्य हैं, मैं बस कुछ आत्मनिर्भर अभ्यास कर रहा था। मैं एक आत्म-शिक्षार्थी बनने की पूरी कोशिश करता हूं।MySQL कई से कई का चयन करें

मेरे पास 3 टेबल हैं जिनमें से एक एक लिंकिंग टेबल है। मैं कहता हूं कि "कौन से उपयोगकर्ता एचटीसी और सैमसंग फोन दोनों के मालिक हैं" (वे 2 फोन हैं) कहें। मैं अनुमान लगा रहा हूं कि उत्तर कहां है, लेकिन मैं यह नहीं समझ सकता कि इसे कैसे शब्द दिया जाए।

-- Table: mark3 
+---------+-----------+ 
| phoneid | name  | 
+---------+-----------+ 
|  1 | HTC  | 
|  2 | Nokia  | 
|  3 | Samsung | 
|  4 | Motorolla | 
+---------+-----------+ 

-- Table: mark4 
+------+---------+ 
| uid | phoneid | 
+------+---------+ 
| 1 |  1 | 
| 1 |  2 | 
| 2 |  1 | 
| 2 |  3 | 
| 2 |  4 | 
| 3 |  1 | 
| 3 |  3 | 
+------+---------+ 

-- Table: mark5 
+------+-------+ 
| uid | name | 
+------+-------+ 
| 1 | John | 
| 2 | Paul | 
| 3 | Peter | 
+------+-------+ 

उत्तर

12

कुंजी DISTINCT फ़ोन नामों का उपयोग करके ग्रुप बाय/हैविंग में है। जब गिनती 2 होती है, तो आपको पता चलेगा कि उपयोगकर्ता दोनों फ़ोन हैं।

SELECT m5.name 
    FROM mark5 m5 
     INNER JOIN mark4 m4 
      ON m5.uid = m4.uid 
     INNER JOIN mark3 m3 
      ON m4.phoneid = m3.phoneid 
    WHERE m3.name in ('HTC', 'Samsung') 
    GROUP BY m5.name 
    HAVING COUNT(DISTINCT m3.name) = 2; 
+0

बहुत बहुत धन्यवाद जो! – enchance

+2

@enchance: कुछ भी "धन्यवाद" एक स्वीकृत उत्तर की तरह नहीं कहता है। :-) –

+0

आपको यह मिला, आदमी। साथ ही, तालिका 'मार्क 5' को कॉल करने के बजाय आपने इसे एम 5 में बनाया है, मुझे नहीं पता था कि आप टेबल नाम के बाद इसे लिखकर ऐसा कर सकते हैं। क्या यह एएस के बराबर है जो कॉलम नामों के लिए है? – enchance

0

जवाब मुझे लगता है कि आप के लिए देख रहे हैं:

"SELECT DISTINCT mark5.name FROM mark5 JOIN mark4 ON (mark4.uid = mark5.uid) JOIN mark3 ON (mark3.phoneid = mark4.phoneid) WHERE mark3.name = 'HTC' && mark3.name = 'Samsung'" 

मुझे विश्वास है कि आपके प्रश्नों जहां mark5 क्षेत्र से भिन्न नाम खींच रहे हैं और उन विशिष्ट मानों जहां पर अपने अन्य तालिकाओं में शामिल होने का जवाब देंगे फोन का नाम एचटीसी या सैमसंग

+3

मुझे यकीन है कि आप एंड्रॉइड के स्थान पर && का उपयोग नहीं कर सकते हैं, लेकिन मैं गलत हो सकता हूं। भले ही, वह कभी भी किसी भी पंक्ति को वापस नहीं करेगा क्योंकि फ़ोन नाम एक ही समय में एचटीसी और सैमसंग दोनों नहीं हो सकता है। –

+0

कुछ भी वापस नहीं करता है। जो का जवाब बहुत बेहतर है। – enchance

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