Hallo,
ich habe zwei Tabellen, eine Teilnehmertabelle und eine Teilnahmentabelle.
Der Einfachheit halber besteht im Folgenden die Teilnehmertabelle nur aus der id (primary key), die Teilnahmentabelle aus id, teilnehmer_id und veranstaltungs_id.
Es gibt Teilnehmer, die bisher in der Teilnahmentabelle noch nicht vorhanden sind, z.B. weil die Veranstaltung noch nicht stattgefunden hat.
Ich möchte nun eine performante Query erstellen, die mir die Teilnehmer ausgibt und dabei einen Flag, ob sie bereits in der Teilnahmentabelle vorhanden sind.
Mein Ansatz
funktioniert, ist aber sehr langsam. Für eine Performancemessung habe ich zunächst von einer Indizierung abgesehen.
Welche besseren Alternativen existieren zu meinem Konstrukt?
Ich möchte aus Wartbarkeitsgründen von Queries absehen, die UNION WHERE EXISTS/ NOT EXISTS beinhalten, weil die eigentliche Query sehr groß ist, und dann der SQL-Code prinzipiell doppelt vorhanden wäre.
Danke,
m(y/s)slqer
ich habe zwei Tabellen, eine Teilnehmertabelle und eine Teilnahmentabelle.
Der Einfachheit halber besteht im Folgenden die Teilnehmertabelle nur aus der id (primary key), die Teilnahmentabelle aus id, teilnehmer_id und veranstaltungs_id.
Es gibt Teilnehmer, die bisher in der Teilnahmentabelle noch nicht vorhanden sind, z.B. weil die Veranstaltung noch nicht stattgefunden hat.
Ich möchte nun eine performante Query erstellen, die mir die Teilnehmer ausgibt und dabei einen Flag, ob sie bereits in der Teilnahmentabelle vorhanden sind.
Mein Ansatz
PHP Code:
SELECT
t.id,
1-(GROUP_CONCAT(p.id) <=> NULL) AS istEchterTeilnehmer
FROM teilnehmer t
LEFT JOIN teilnahmen p ON p.teilenehmerid = t.id
GROUP BY t.id
Welche besseren Alternativen existieren zu meinem Konstrukt?
Ich möchte aus Wartbarkeitsgründen von Queries absehen, die UNION WHERE EXISTS/ NOT EXISTS beinhalten, weil die eigentliche Query sehr groß ist, und dann der SQL-Code prinzipiell doppelt vorhanden wäre.
Danke,
m(y/s)slqer
Comment