Hallo,
SELECT T1.zID,T2.Name FROM 0815
AS T1
LEFT JOIN
0815
AS T2 ON T2.zID = T1.zID
WHERE T1.Name LIKE '%Blub%'
>
> warum verwendest Du einen [LEFT JOIN](http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/#leftright_join)?
> Warum verwendest Du keinen [INNER JOIN](http://aktuell.de.selfhtml.org/artikel/datenbanken/joins/#inner_join)?
>
> > zID Name
> > 123 Test
> > 123 Blub
> > 123 Keine Ahnung
> > 436 UserBlub
> > 436 Random Scheiß
> > 436 YX Scheiß ZP
> > 436 Weis ich nicht
>
> > Wenn ich ab nun nach "scheiß" suchen lassen dann (was auch logisch ist) listet er die zID 2 mal mit allen dazugehöriegen einträgen auf. Jemand eine
> > Idee das design oder die abfrage zu verbessern ?
>
> Ein paar Ideen:
>
> - nutze DISTINCT
> - gruppiere
> - nutze Subselects statt des [Selfjoins](http://aktuell.de.selfhtml.org/artikel/datenbanken/fortgeschrittene-joins/selfjoin.htm).
>
> Prüfe mit [EXPLAIN](http://dev.mysql.com/doc/refman/5.1/de/explain.html) den Aufwand der jeweiligen Lösung.
>
>
> Freundliche Grüße
>
> Vinzenz
Hab jetzt mal so versucht:
`SELECT T2.* FROM `0815` AS T1,`0815` AS T2 WHERE T1.zID = T2.zID AND T1.Name LIKE '%Scheiß%' GROUP BY T2.id;`{:.language-sql}
Beim EXPLAIN ist der unterschied das hier "Using temporary; Using filesort" benutzt wird beim JOIN nicht. Bin mir jetzt nicht wirklich sicher was denn nun
von beidem besser ist :/