Maik W. aus E.: Join über mehrere Tabellen

Beitrag lesen

Tach auch Ekki,

Danke für Deine Rückmeldung.

SELECT ahi1.arzt_ref

,      ahi1.history_ref
,      h1.historytext
,      ahi2.arzt_ref
,      ahi2.history_ref
,      h2.historytext
  FROM arzt_hi       AS ahi1
  INNER JOIN arzt_hi AS ahi2 ON ahi1.arzt_ref = ahi2.arzt_ref
  JOIN history       AS h1   ON ahi1.history_ref = h1.historyid
  JOIN history       AS h2   ON ahi2.history_ref = h2.historyid
WHERE h1.historytext LIKE 'Initialanschreiben erhalten'
   AND h2.historytext NOT LIKE 'Rückmeldung'
GROUP BY ahi1.arzt_ref
ORDER BY ahi1.arzt_ref

  

> Zuerst einmal ist diese Abfrage unsauber, da Du lediglich über eine Spalte gruppierst, Dir aber weitere zusätzliche Spalten ohne passende Aggrgatsfunktion ausgeben lässt. Jedes andere DBMS außer MySQL würde Dir die Abfrage wieder um die Ohren hauen -  

ich weiß, ich weiß... habe das gemacht, um zu sehen, ob ich ansatzweise in die richtige Richtung tüftle.  
  

> Warum hast Du jetzt eine zweite Verknüpfungstabelle (ahi2) zur ersten (ahi1) dazugejoint? Warum joinst Du jeweils eine History-Tabelle zu jeder der beiden Verknüpfungstabellen?  
>   
> Deine Anforderung war:  
>   
> > Jetzt möchte ich eine Liste aller arzt\_ids und ein paar Daten, bei denen in der zugehörigen History ein bestimmter History-Text steht und ein bestimmter andere eben nicht.  
>   
> Du sprichst von \*DER\* zugehörigen History - benutzt aber zwei.  

Ich dachte, daß ich ja zwei Abfragen brauche, einmal ob ein Wert "Initialanschreiben" da ist  und einmal ob ein Wert "Rückmeldung" nicht da ist.  
  

> Irgendwie ist mir das Datenmodell und das, was Du willst, noch nicht so ganz klar.  
  
Kein Problem, also:  
  
history:  
  
id | history\_text  
1  | Initialanschreiben erhalten  
2  | Initialanschreiben erhalten  
3  | Rückmeldung  
  
arzt\_hi:  
  
arzt\_ref | history\_ref  
  1        |      1  
  2        |      2  
  1        |      3  
  
In der History-Tabelle werden alle Einträge für alle Ärzte gespeichert, die Verknüpfung auf die Arzt-Id wird über die arzt\_hi gelöst. Jetzt möchte ich die IDs der Ärzte, die einen "Initialanschreiben"-Eintrag haben, aber nicht "Rückmeldung", hier als Beispiel die ID '2'  
  

> Definiere Deine Anforderungen genauer.  
  
Besser?  
  
Gruß  
  
Maik

-- 
![Margin-Regler am Control-Data-Tischrechner im RRZE Erlangen](http://www.gruss-aus-essen.de/selfforum/mehr_margin.jpg)  
Mehr margin! Sag ich ja immer...