Si lo que determina que una tarea está completada es que el ID de esa tarea aparezca en la tabla AVANCE, lo que debe suceder es que la cantidad de tareas diferentes en `Tareas Asignadas` debe ser igual a la cantidad de tareas de ese proyecto en Avance.
Con esa restricción sabemos que esto:
Código MySQL:
Ver original AU.*
auditorias AU
INNER JOIN `asignacion de tareas` AT
ON AU.ID_auditoria
= AT.Auditoria
Devolvería todos los datos de las auditorias que tengan tareas asignadas.
De estas auditorías necesitas saber cuáles nolo han completado. Eso se obtiene cruzando una consulta similar con Avance y obtener los ID de las audotirías que tengan al menos un registro en Avance en NULL (en eso estaba bien pensado.
Lo que
no es necesario es cruzar en este punto los datos con las otras tablas, que para lo único que sirven es para obtener detalles de las tareas. Eso bien lo puedes hacer con la tabla resultado, y para saber qué tareas se realizaron, pero la consigna que propones
no lo dice (regla básica: no poner nada que no se requiera, consume recursos innecesariamente).
En definitiva, algo así:
Código MySQL:
Ver original AU.*
auditorias AU
INNER JOIN `asignacion de tareas` AT
ON AU.ID_auditoria
= AT.Auditoria
INNER JOIN `asignacion de tareas` AT
ON AU.ID_auditoria
= AT.Auditoria
LEFT JOIN `Avance` AV
ON AT.Tarea
= AV.ID_asignacion
La idea de la consulta es que excluya de las auditorias con tareas asignadas aquellas que tengan alguna tarea incompleta