2012-06-10 14 views
5

में सभी मैं अपने डेटाबेस, उपयोगकर्ताओं, रोजगार, योग्यता, job_qualifications में पांच टेबल और users_qualificationMySQL जहां

मैं सभी कर्मचारियों है कि एक विशेष काम बाहर ले जाने के लिए योग्य हैं चयन करने की आवश्यकता है। यह सभी के रूप में अगर वहाँ एक बयान था उपयोगी हो में तो उदाहरण के लिए क्वेरी

SELECT user_id 
FROM users_qualification 
WHERE qualification_id ALL IN 
    (
     SELECT qualification_id 
     FROM job_qualifications 
     WHERE jobs_id = 1 
    ) 
+0

बस एक विचार: आपके उद्देश्य के लिए, क्या यह अन्य तरीकों की जांच करने के लिए और अधिक समझदारी नहीं करेगा: उन लोगों का चयन करें जहां नौकरी योग्यता उपयोगकर्ता की योग्यता में सभी हैं? –

उत्तर

6

होगा होगा आप योग्यता है कि इस काम के लिए आवश्यक हैं की संख्या पता, तो आप इस क्वेरी लिख सकते हैं:

SELECT uq.user_id 
FROM users_qualification uq JOIN job_qualifications jq 
    ON uq.qualification_id = jq.qualification_id 
WHERE jq.jobs_id = 1 
GROUP BY uq.user_id 
HAVING COUNT(*) = {# of qualifications} 

योग्यता की संख्या जानने के लिए, चलाएँ:

SELECT COUNT(*) 
FROM job_qualifications 
WHERE jq.jobs_id = 1 
+0

मुझे यह सुनिश्चित करने की ज़रूरत है कि मैं सही योग्यता वाले उपयोगकर्ताओं को प्राप्त करूं, न केवल योग्यता की संख्या, क्या यह अभी भी प्राप्त होगा? –

+0

@ ब्लेंड-डान हां, 'जॉइन' उस –

+0

का ख्याल रखता है सरल, सुरुचिपूर्ण - अद्भुत। मैं घंटों की खोज कर रहा हूं, और इसने मेरी समस्या को 10 सेकंड में हल किया। आप को सलाम, @TheScrumMeister। –

2

स्क्रम माईस्टर के जवाब में विस्तार करते हुए, आप कुछ इस तरह कर सकता है:

+०१२३५१६४१०६१
SELECT 
    distinct uq.user_id 
FROM 
    users_qualification uq 
    JOIN job_qualifications jq ON uq.qualification_id = jq.qualification_id 
WHERE 
    jq.jobs_id = 1 
GROUP 
    BY uq.user_id 
HAVING 
    COUNT(*) = (SELECT COUNT(*) FROM job_qualifications jq2 WHERE jq2.job_id = jq.job_id) 
+0

स्क्रूमिस्टर उत्तर को बढ़ाने के लिए धन्यवाद एलेक्स +1 –

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