2016-07-05 12 views
0

Besserer Titel? Bitte bearbeiten.Mehrere Join-Datensätze zu einer ID zusammenfügen

Mit zwei Tabellen:

# table1 
     id name desc 
    -------------------- 
     1 Nim blah 
     2 Rod blah 
     3 Nero blah 

# table2 
id_table1 rank url 
---------------------- 
     1  1 U11 
     1  2 U12 
     1  3 U13 
     2  1 U21 
     3  1 U31 
     3  2 U32 

Derzeit bin ich eine Abfrage JOIN und in der Regel erhalten:

id name desc url 
--------------------- 
    1 Nim blah U11 
    1 Nim blah U12 
    1 Nim blah U13 
    2 Rod blah U21 
    3 Nero blah U31 
    3 Nero blah U32 

Ich frage mich, ob es eine Abfrage ist, dass so etwas liefern:

id name desc url(1) url(2) url(3) 
------------------------------------- 
    1 Nim blah U11  U12  U13 
    2 Rod blah U21  NULL NULL 
    3 Nero blah U31  U32  NULL 

Antwort

0

Angenommen, Sie kennen die Anzahl der möglichen Spalten, eine Op tion ist conditional aggregation zu benutzen, um Ihre Ergebnisse zu pivot:

select t1.id, t1.name, t1.desc, 
     max(case when t2.rank = 1 then t2.url end) url1, 
     max(case when t2.rank = 2 then t2.url end) url2, 
     max(case when t2.rank = 3 then t2.url end) url3 
from table1 t1 
     join table2 t2 on t1.id = t2.id_table1 
group by t1.id, t1.name, t1.desc 
+0

Großartig! Ja, ich kenne die Anzahl der möglichen Spalten im aktuellen Design. Wenn es sich ändert, kann ich eine Pre-Query machen, um das zu bestimmen und das 'max()' Segment zu generieren. – user129107

0

Sie die Optionen in einzelnen Spalten benötigen Sie? Ansonsten könnte group_concat interessant sein:

SELECT t1.id, t1.name, t1.desc, 
    group_concat(DISTINCT t2.url) as urls 
FROM table1 t1 
    INNER JOIN table2 t2 
      ON t.id = t2.id_table1; 
Verwandte Themen