2015-10-06 5 views
5

में शामिल होते समय मैं दो तालिकाओं हैमैं दोहराव कैसे बच सकते हैं दो तालिकाओं

1. test 1 

    2. test 2 

पहले तालिका

**id** - **name** 

1  - kerala 

2  - Tamilnadu 

दूसरा टेबल है

**name** - **jid** 

    value 1 - 1 

    value 2 - 1 

    value 3 - 1 

    value 4 - 1 

    value 5 - 2 

मेरे क्वेरी -

SELECT t1.name, t2.name 
FROM test1 t1 
INNER JOIN test2 t2 
WHERE t1.id = t2.jid 

अब मैं इस परिणाम प्राप्त

**name** - **name** 

Kerala - value 1 

kerala - value 2 

kerala - value 3 

kerala - value 4 

लेकिन मैं इस

012 की तरह एक परिणाम की जरूरत है
Kerala - value 1 

     - value 2 

     - value 3 

     - value 4 

मूल्य 'केरल' दोहराया नहीं जाना चाहिए।

+4

क्या आप के लिए आम तौर पर परत है कि डेटा, नहीं एक है कि यह उत्पन्न करता है को प्रदर्शित करता है में किया जाता है पूछ रहे हैं। इसलिए, आपको अपने एसक्यूएल को रखना चाहिए और अपने समाधान की विभिन्न परतों में डुप्लिकेट को हटा देना चाहिए। –

उत्तर

2

आप उपयोगकर्ता समूह concat method.Pls क्वेरी के नीचे की जांच कर सकते

SELECT t1.name,GROUP_CONCAT(t2.name) FROM test1 t1 INNER JOIN test2 t2 WHERE t1.id = t2.jid 
+0

धन्यवाद। यह पूरी तरह से काम करता है :) –

0

मुझे नहीं लगता कि यह संभव है - आपके पास लौटाए गए मूल्यों के अंदर खाली मूल्य नहीं हो सकते हैं।

1

आप निम्न क्वेरी का उपयोग कर सकते हैं:

SELECT CASE 
      WHEN t2.name = t3.firstName THEN t1.name 
      ELSE '' 
     END AS name, 
     t2.name 
FROM test1 t1 
INNER JOIN test2 t2 ON t1.id = t2.jid 
INNER JOIN (
    SELECT jid, MIN(name) AS firstName 
    FROM test2 
    GROUP BY jid) AS t3 ON t2.jid = t3.jid 

इस के रूप में वहाँ एक भी रिकॉर्ड है जब तक आवश्यक परिणाम का उत्पादन करेगा MIN(name) प्रति jidtest2 तालिका में।

Demo here

1

कोशिश इस

SELECT IF (@oldname = name1,'',name1), 
     name2, 
     @oldname:=name1 AS oldname FROM 
    (
    SELECT t1.name AS name1, t2.name AS name2 
    FROM test1 t1 
    INNER JOIN test2 t2 
    WHERE t1.id = t2.jid 
) t, 
    (SELECT @oldname:='') tmp; 
संबंधित मुद्दे