No tiene cerca del límite de JOIN para MySQL. Tu número de uniones no está mal. Sin embargo, unirse a una tabla derivada (su subconsulta interna) como lo está haciendo puede causar problemas de rendimiento, ya que las tablas derivadas no tienen índices. Realizar una combinación en una tabla derivada sin índices puede ser lento.
Debería considerar crear una tabla temporal real con índices para unir, o encontrar una forma de evitar la subconsulta.
Un JOIN en MySQL es básicamente como hacer una búsqueda (buscar) para cada fila unida. Por lo tanto, MySQL tendrá que realizar muchas búsquedas si está uniendo muchos registros. Lo que puede ser un problema no es tanto la cantidad de tablas a las que se une como el número de filas a las que se une.
De todos modos, MySQL solo realizará tantas búsquedas antes de darse por vencido y simplemente leer toda la tabla. Hace un buen trabajo al decidir cuál será menos costoso.
Quizás lo mejor que puede hacer es ayudarlo a adivinar actualizando las estadísticas del índice con ANALYZE TABLE.
Puede tener una cláusula WHERE por SELECT. Entonces, su subconsulta interna tendrá una cláusula WHERE y su consulta externa tendrá una cláusula WHERE, y estas se aplicarán después de JOIN (al menos lógicamente, aunque MySQL generalmente las aplicará primero para el rendimiento).
Además, todo esto suponiendo que sepa cómo usar correctamente los índices.