MrSpoocy: MySQL - Left JOIN - Verbunde datensetze suchen (problem: doppel)

Beitrag lesen

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 :/