2012-12-11 8 views
10

मैं एक परस्पर-संदर्भ तालिका से मेल:Mysql - चुनिंदा आईडी कि सभी टैग

ID | tag 
1 | 4 
1 | 5 
1 | 6 
2 | 4 
2 | 5 
2 | 8 
3 | 2 

मैं आईडी टैग का एक सेट के सभी से मेल चयन करना होगा। उदाहरण के लिए, अगर मुझे '4','5' टैग दिए गए तो मुझे आईडी '1','2' मिल जाएगी। अगर मुझे '4','2' टैग दिए गए तो मुझे कोई आईडी नहीं मिलेगी क्योंकि टैग की सभी से मेल खाने वाली कोई आईडी नहीं थी।

इसके अलावा, अगर मैं टैग '4','9' दिए गए थे तो मैं भी नहीं किसी भी जिसके परिणामस्वरूप आईडी क्योंकि '9' के लिए एक खोज एक NULL मूल्य में परिणाम होगा मिलना चाहिए, और इसलिए कोई आईडी सभी टैग से मेल खाते हैं।

मैं पिछले 2 दिनों से अपने बालों को खींच रहा हूं। उम्मीद है कि कोई मेरी मदद कर सकता है।

+0

टैग ' '4', '8'' देना चाहिए परिणाम के रूप में आप आईडी = 2', क्या वे नहीं चाहिए? –

+0

हां, आप सही हैं। मेरी गलती - मुझे देखने दो कि क्या मैं इसे ठीक कर सकता हूं। – user1113531

+1

इस प्रश्न को भी देखें, इस सामान्य (सामान्य) समस्या को हल करने के 10 से अधिक तरीकों के लिए: ** [एसक्यूएल परिणामों को कितने-से-रिलेशन रिलेशनशिप में फ़िल्टर करना है] (http://stackoverflow.com/questions/7364969/how -to-filter-sql-results-in-a-has-many-through-relation) ** –

उत्तर

17

क्वेरी का विचार यह है कि आपको WHERE खंड में प्रदान किए गए मानों की संख्या के लिए रिकॉर्ड्स की संख्या से मिलान करने की आवश्यकता है।

SELECT ID 
FROM tableName 
WHERE tag IN (4, 8) 
GROUP BY ID 
HAVING COUNT(*) = 2 

यदि अद्वितीय बाधा हर आईडी के लिए टैग पर निर्दिष्ट नहीं किया गया, तो DISTINCT की जरूरत है

SELECT ID 
FROM tableName 
WHERE tag IN (4, 8) 
GROUP BY ID 
HAVING COUNT(DISTINCT tag) = 2 
+0

तेज प्रतिक्रिया और मेरी स्वच्छता बनाए रखने के लिए धन्यवाद। यह बहुत अच्छा काम करता है! टैग पर एक अनूठी बाधा है इसलिए पहला सुझाव सही है। – user1113531

+0

आपका स्वागत है ': डी' –

+0

मेरा नायक! मैं 20 बालों की क्वेरी के साथ अपने बालों को फेंक रहा था, मैं जो भी लापता था वह वह हिस्सा था, कुडोस! – NaturalBornCamper

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