Ilja: Join über mehrere Tabellen

Beitrag lesen

moin,

ich habe hier eine mySQL-DB (4.1.15 auf dem Testserver, 5.0.32 produktiv), in der ich drei Tabellen habe:

wenn möglich versuche beides auf die gleiche version zu bringen. kann zu überraschungen im unterschiedlichen verhalten führen.

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.

mal von deiner impliziter JOIN schreibweise abgesehen, auf die du schon hingewiesen wurdest, sind JOINS in vielen fällen "böse". das kommt aber immer auf die jeweilige verwendung drauf an. wenn du nur daten aus der tabelle arztdaten in der projektion ausgeben willst, dann solltest du JOINS vermeiden und korrelierte unterabfragen zum einsatz kommen lassen, die in die WHERE klausel eingebaut werden, um die gewünschten datensätze zu selektieren.

SELECT a.arzt_id, a.spalte2, a.spalte2....
FROM arztdaten a
WHERE EXISTS (SELECT NULL
              FROM arzt_hi ah
              INNER JOIN history h ON h.history_id  = ah.history_ref
              WHERE ah.arzt_ref = a.arzt_id
              AND h.historytext = 'Initialanschreiben erhalten'
             )
AND NOT EXISTS (SELECT NULL
                FROM arzt_hi ah
                INNER JOIN history h ON h.history_id  = ah.history_ref
                WHERE ah.arzt_ref = a.arzt_id
                AND h.historytext = 'Rückmeldung'
               )
;

Ilja