EKKi: Join über mehrere Tabellen

Beitrag lesen

Mahlzeit Maik W. aus E.,

was ich habe:

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

  
Du solltest zuerst diese Abfrage bereinigen - eine Mischform von expliziten und impliziten JOINs ist eigentlich nie wirklich sinnvoll, übersichtlich und verständlich. Vorschlag:  
  
~~~sql
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 - und selbst MySQL muss raten, was Du haben willst ... es gibt keine Garantie dafür, dass das immer die gleichen Daten sind. Behebe also diesen Fehler.

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. Irgendwie ist mir das Datenmodell und das, was Du willst, noch nicht so ganz klar.

Aber irgendwie kommt da noch zu viel raus, nämlich alles. Kann wer helfen?

Definiere Deine Anforderungen genauer.

MfG,
EKKi

--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|