2012-04-04 10 views
25

साथ कहाँ खंड का उपयोग कर मैं एक तालिका में निम्नलिखित क्षेत्रों के साथ कई पंक्तियों है कि है:एसक्यूएल वक्तव्य से अधिक मान

PersonName SongName Status 

मैं एक बहु चयन लिस्टबॉक्स, जो मैं मान प्राप्त कर सकते हैं से चयनित नामों का उपयोग करना चाहते हैं, और उसके बाद एक क्लॉज करें ताकि यह गीत नाम दिखाए कि चयनित लोग सभी खेल सकते हैं, इसलिए स्थिति पूरी हो गई है।

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

PersonName  SongName Status 
Holly   Highland Complete 
Holly   Mech  Complete 
Ryan   Highland Complete 

अगर मैं सूची बॉक्स से होली और रयान का चयन करें और के रूप में वे दोनों क्या पता है कि बटन क्वेरी सिर्फ हाइलैंड दिखाना चाहिए दबाएँ।

+0

तो 'Ryan' स्थिति के रूप में' Complete' नहीं है, परिणाम होना चाहिए 'Highland'? –

+0

चुनें [गीत] [सीखना] कहां ([बैंडीनाम] '%' + '' 'और आइटम। टेक्स्ट और' '+'% ') और ([बैंडीनाम] जैसे'% '+' '' और आइटम। टेक्स्ट & "'+'% ') और ([स्थिति] जैसे' पूर्ण ') – Sophie

उत्तर

48

इस प्रयास करें:

select songName from t 
where personName in ('Ryan', 'Holly') 
group by songName 
having count(distinct personName) = 2 

संख्या होने में लोगों की राशि से मेल खाना चाहिए। आप भी स्थिति की जरूरत है Complete उपयोग पिछले एक के बजाय इस where खंड होने के लिए:

where personName in ('Ryan', 'Holly') and status = 'Complete' 
+0

यह कोई परिणाम नहीं लाता है, यह वही है जो मैं पहले से काम कर रहा था, अगर आपने 'होली' और 'रयान' 'तो इसका कोई परिणाम नहीं आता है, यदि आप इसका उपयोग करते हैं या इसके बजाय यह उन सभी गानों को लाएगा जिनके पास होली और रयान दोनों के लिए पूर्ण स्थिति है, न केवल उन दोनों जो होली और रयान दोनों के लिए पूर्ण हैं। धन्यवाद – Sophie

+1

यह संभव नहीं है, क्योंकि आप देख सकते हैं कि यह आपके द्वारा प्रदत्त डेटा के साथ अपेक्षित परिणाम [यहां] (http://sqlfiddle.com/#!2/e1783/2) प्रदान करता है। –

+0

तो यह क्वेरी भाग गई और आपको अपेक्षित परिणाम प्रदान किया, इसलिए यह सही ढंग से भाग गया? – Sophie

6
SELECT PersonName, songName, status 
FROM table 
WHERE name IN ('Holly', 'Ryan') 

आप कर रहे हैं parametrized संग्रहित प्रक्रिया का उपयोग करते हैं:

  1. अल्पविराम से अलग स्ट्रिंग में दर्रा
  2. उपयोग विशेष कार्य विभाजित करने के लिए अल्पविराम तालिका मूल्य चर
  3. उपयोग INNER JOIN ON t.PersonName = newTable.PersonName में स्ट्रिंग अलग एक मेज चर का उपयोग कर जिसमें नाम
+0

नाम कॉलम व्यक्तिनाम का उपनाम होना चाहिए। –

+0

@ एएफ। आप देख सकते हैं कि आप उलझन में क्यों होंगे - नमूना डेटा पहले उल्लिखित परिभाषाओं के लिए विभिन्न कॉलम नाम दिखाता है! – Bridge

+0

@ ब्रिज सवाल ओओ –

0
Select t1.SongName 
From tablename t1 
left join tablename t2 
on t1.SongName = t2.SongName 
    and t1.PersonName <> t2.PersonName 
    and t1.Status = 'Complete' -- my assumption that this is necessary 
    and t2.Status = 'Complete' -- my assumption that this is necessary 
    and t1.PersonName IN ('Holly', 'Ryan') 
    and t2.PersonName IN ('Holly', 'Ryan') 
+0

वे दोनों एक ही टेबल में हैं? – Sophie

+0

@ सोफी हां, यह एक आत्म-शामिल है। –

+0

मेरी तालिका को सीखना कहा जाता है कि टी 1 और टी 2 के बराबर क्या होगा? – Sophie

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