2009-08-02 19 views
8

मेरे पास एक ऐसी स्थिति है जहां मेरे पास शीर्षकों (टी 1) की एक तालिका है और कई लिंक वाले एक अन्य टेबल हैं जो इन शीर्षकों (टी 2) को कई रिश्तों में संदर्भित करते हैं।MySQL कई रिश्तों के लिए सिंटैक्स में शामिल हों

मुझे जो चाहिए वह ध्वज के साथ लौटाए गए शीर्षकों की पूरी सूची है जो इंगित करता है कि इससे जुड़े एक विशिष्ट लिंक हैं या नहीं।

वाम जुड़ें और समूह द्वारा:

SELECT 
    t1.id 
    , t1.title 
    , t2.link_id AS refId 
FROM 
    t1 
    LEFT JOIN t2 
     ON (t1.id = t2.title_id) 
GROUP BY t1.id; 

यह करीब है के रूप में यह मेरे या तो पहले link_id या शून्य देता refId कॉलम में।

अब, यदि मैं पूरे डेटा सेट के माध्यम से टी 2 चलाने की बजाय एक विशिष्ट लिंक_आईडी है तो मैं परिणामों को कैसे रोकूं?

मैं एक कहां खंड, उदाहरण के लिए जोड़ देते हैं तो:

WHERE t2.link_id = 123 

मैं केवल कुछ रिकॉर्ड जहां link_id मैचों लेकिन मैं अभी भी refId स्तम्भ में व्यर्थ के साथ वापस आ खिताब का पूरा सेट की जरूरत है पाने के लिए जब तक link_id = 123.

आशा किसी को इसके बजाय कहां खंड में की

उत्तर

13

मदद कर सकते हैं, बायाँ शामिल हों खंड में आपके मानदंड डाल:

SELECT 
    t1.id 
    , t1.title 
    , t2.link_id AS refId 
FROM 
    t1 
    LEFT JOIN t2 
     ON t1.id = t2.title_id AND t2.link_id = 123 
GROUP BY t1.id; 
+0

ठनक दोनों इस बात के लिए के लिए शर्त में शामिल होने में यह रखो। अच्छी तरह से काम। :) – Das123

4

दूसरी तालिका

SELECT t1.id, t1.title, t2.link_id as refId 
FROM t1 
LEFT JOIN t2 ON t1 = t2.title_id AND t2.link_id = 123 
GROUP BY t1.id; 
+0

यह नहीं होना चाहिए: 't1.id = t2.title_id' पर? या तालिका निर्दिष्ट करते समय स्वचालित रूप से पीके ले जाएगा? –

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