Metoda vikinga jest jak najbardziej słuszna, należy założyć klucze obce dzięki czemu zapewnisz bazie integralność danych. Podczas usuwania rekordu z tabeli szkolenia automatycznie usunięte zostaną rekordy z tabeli szkolania_uczestnicy. To samo sie stanie gdy usuniesz rekord z tabeli uczestnicy,
Moje zapytania nie potrzebują żadnych parametrów. Odpal jedno z nich jako trzecie (lub drugie jeśli założysz klucze obce). Po prostu usuwają z tabeli uczestnicy te rekordy, dla których nie ma wpisów w tabeli szkolenia_uczestnicy. Choć nie wiem czy nie lepiej byłoby jako pierwsze odpalić:
DELETE FROM użytkownicy WHERE id_uzytkownika IN (SELECT id_uzytkownika FROM szkolenia_uzytkownicy WHERE id_szkolenia = $id_usuwanego_szkolenia)
gdyż poprzednie zapytania orają niejako całość tabeli. Jeśli z jakiegoś powodu musisz odpalać to jako trzecie to na jeden z poprzednich sposobów, jeśli nie - użyj powyższego.
Edit:
Powyższe tez ma jedna pułapkę - usunie użytkownika nawet jeśli jest przypisany na usuwane szkolenie oraz dowolne inne. No ale masz kilka wędek - złóż z nich odpowiednią