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