2015-10-06 11 views
5

ho due tavoliCome posso evitare la duplicazione mentre unendo due tabelle

1. test 1 

    2. test 2 

primo tavolo ha

**id** - **name** 

1  - kerala 

2  - Tamilnadu 

Seconda tavola

**name** - **jid** 

    value 1 - 1 

    value 2 - 1 

    value 3 - 1 

    value 4 - 1 

    value 5 - 2 

mia domanda -

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

ora ho questo risultato

**name** - **name** 

Kerala - value 1 

kerala - value 2 

kerala - value 3 

kerala - value 4 

Ma ho bisogno di un risultato come questo

Kerala - value 1 

     - value 2 

     - value 3 

     - value 4 

il valore 'del Kerala' non deve essere ripetuto.

+4

Quello che chiediamo è generalmente fatto nel livello che visualizza i dati, non quello che lo genera. Quindi, dovresti mantenere l'SQL che hai e rimuovere i duplicati in diversi livelli della soluzione. –

risposta

2

si può method.Pls concat utente Gruppo controllare sotto interrogazione

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

Grazie. funziona perfettamente :) –

0

Non penso sia possibile, non è possibile avere valori vuoti all'interno dei valori restituiti.

1

È possibile utilizzare la seguente query:

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 

questo produrrà il risultato richiesto fino a quando v'è un singolo record avere MIN(name) per jid nella tabella test2.

Demo here

1

provare questo

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; 
Problemi correlati