Daniela Koller: mySQL: LEFT JOIN

Beitrag lesen

Hi Antje, André

Persönlich würde ich mich in diesem Fall jedoch für folgende Variante entscheiden:

select tab1.id,Name,info from tab1 left join tab2 on tab1_id=tab1.id order by id

Hier erhälst du zwar keine Nullzellen, aber gleiche Name erfüllen ja prinzipiell den gleichen Effekt. Werte die einen Eintrag in der Tab1 haben und keinen Eintrag in Tab2 werden ja sowieso zurückgegeben.

Die Frage ist hier, ob mit left joins zu arbeiten sinnvoll ist. So werden
auch Namen ausgegeben, für die es gar keine Entsprechungen in Tabelle 2 gibt.
Da MySQL in den neuen Versionen inner join kann, wäre das so besser, falls
Namen ohne Entsprechung nicht ausgegeben werden sollen.
Ein Sort auf die info von Tabelle 2 zusätzlich wäre wohl auch noch sinnvoll.

select a.id, a.name, b.info
  from tab1 as a
     inner join tab2 as b on (a.id = b.tab1_id)
  order by a.id, b.info

IMHO ist mit selbem Name sehr einfach das nachher per PGM-Code in die
Struktur zu bringen.

Lies erste Zeile
mache mit dem namen zeile für die datenzeile
mache infozeile 1 für die datenzeile
for (alle zeilen ab erste zeile) {
   if (name = lastname) {
      mache infozeile n
   } else {
      mache namenzeile
      mache infozeile 1
   }
}

Ob die Variante mit der temporären Tabelle nicht schneller/resourcenschonender ist, müsste man
bei grossen Datenmengen allerdings erst ausprobieren (BENCHMARK).

Gruss Daniela