2013-05-03 16 views
5

मुझे आज एक दिलचस्प समस्या का सामना करना पड़ा है (या ऐसा मुझे लगता है) और मैंने सोचा कि यह इसे साझा करने के लिए उत्पादक होगा।इन दो विशिष्ट तालिकाओं में शामिल होना

मैं निम्नलिखित निर्माण के साथ दो डेटाबेस तालिकाओं है:

तालिका 1: mod_class

class_id 
CSD2311 
CSD2314 
CSD12 

तालिका 2: m_classes_enrolled_in

student_id class_id 
5   CSD2311 
5   CSD2314 

तो सबसे पहले टेबल है सभी संभव class_id और दूसरे में class_i है डी और छात्र जो उस वर्ग में नामांकित है। मैं उन सभी वर्गों की एक सूची बनाना चाहता हूं जो छात्र में नामांकित नहीं हैं। अब तक एक बाएँ में शामिल होने वास्तव में अच्छा लग रहा था, लेकिन यह इस तरह से यह प्रदर्शित करने के लिए असंभव लगता है:

SELECT mod_enrolled_in.class_id 
FROM mod_enrolled_in 
WHERE student_id <> 5 
INNER JOIN mod_class 
ON mod_enrolled_in.class_id = mod_class.class_id 

किसी भी मदद की बहुत सराहना की जाएगी, डी

उत्तर

2

आप कर सकता है कि कई तरीके

1)

Select class_id from mod_class 
EXCEPT 
    Select class_id From m_classes_enrolled_in WHERE student_id = 5 

2)

Select class_id from mod_class 
Where class_id NOT IN 
     (Select class_id From m_classes_enrolled_in WHERE student_id = 5) 

3)

Select class_id from mod_class m 
LEFT JOIN 
    (Select class_id From m_classes_enrolled_in WHERE student_id = 5) cs 
    ON m.class_id = cs.class_id 
WHERE cs.class_id IS NULL 
+0

काफी पूरा जवाब। धन्यवाद, यह काम किया! –

1

यह आप के लिए क्या देख रहे है।

SELECT mod_enrolled_in.class_id 
FROM mod_enrolled_in 
LEFT JOIN mod_class 
ON mod_enrolled_in.class_id = mod_class.class_id 
WHERE class_id != 5 
AND mod_class.class_id is NULL 
+0

देखें मैं एक ही करने की कोशिश की पहले यह काम नहीं किया। वैसे भी जवाब के लिए धन्यवाद। –

+0

अभी आज़माएं ..! मैंने पोस्ट संपादित किया। खेद है कि पहले अवसर पर पूरे प्रश्न को नहीं पढ़ा। : पी – Manu

1

क्या आप LEFT JOINmod_class नहीं चाहते हैं ताकि आप एंटी-जॉइन कर सकें?

SELECT mod_class.class_id 
FROM mod_class 
LEFT JOIN mod_enrolled_in ON (mod_class.class_id = mod_enrolled_in.class_id 
AND mod_enrolled_in.student_id = 5) 
WHERE mod_enrolled_in.class_id IS NULL 
1

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

SELECT c.class_id 
FROM mod_class c 

LEFT OUTER JOIN mod_enrolled_in e 
ON e.class_id = c.class_id 
AND e.student_id = ? 

WHERE e.student_id IS NULL; 
1

उपयोग इस: -

Select class_id from mod_class 
Where class_id NOT IN (Select class_id From m_classes_enrolled_in) 

इस SQL FIDDLE

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